C++ 中 pair.second 能否不被初始化？
以代码

    
    
    vector<pair<const string, unsigned>> v{{"XXX", 0}, {"YYY", 0}, {"ZZZ", 0}};

或着

    
    
    vector<pair<const string, unsigned>> v{{"XXX", {}}, {"YYY", {}}, {"ZZZ", {}}};

为例，
全部初始化为 。

然而，如果我们需要节省开销，从而无需将它们初始化并赋值为
，那么代码应该怎样写呢？像下面这样写会报错：

    
    
    vector<pair<const string, unsigned>> v{{"XXX"}, {"YYY"}, {"ZZZ"}};
虽然这个题比较刁钻，但解法还是有的：

            #include <utility>    #include <stdio.h>    template<class T>    union DontInit { T u; DontInit() {} };    int main() {            std::pair<int, DontInit<int> > p{1, {}};            for (int i = 0; i < 100; ++i)                    printf("%d ", p.second.u[i]);            printf("\n");            return 0;    }    

用 -O3 编译，打印出来的一般不是全 0。