【发布时间】:2021-07-06 00:21:58
【问题描述】:
我目前正在尝试理解 C++11 中的列表初始化,我偶然发现了这行代码:std::vector<std::string> vec{3}; 我想知道它实际上在做什么,我注意到在向量中创建了 3 个元素但是,我不知道为什么以及这些元素将被初始化的值是什么。
编辑: 我试过跑步:
int main()
{
std::vector<std::string> vec{3};
std::cout<<vec.size()<<std::endl;
std::cout<<vec[0]<<std::endl;
std::cout<<vec[1]<<std::endl;
std::cout<<vec[2]<<std::endl;
}
我只得到输出:
3
如果它们被默认初始化,输出不应该是:
3
0
0
0
【问题讨论】:
-
每个元素都是默认构造的。也许this
std::vectorConstructor reference 可能有用?顺便说一句,您正在使用链接参考中的重载编号 4(除非您的编译器真的很旧并且使用 C++11 之前的版本,在这种情况下它的编号为 3)。 -
它是否调用 (4) 而不是 initializer_list c'tor,因为没有任何匹配的签名(只有 (10) 需要两个参数)?
-
@Sekai 你正在构建一个字符串向量。您正在打印空字符串。为什么他们会是
"0"? -
3的值不是字符串,因此不能用于初始化列表构造函数。与参数3匹配的唯一其他构造函数是重载列表中的第 4 号。 -
而且一个空字符串和字符串
"0"有很大的不同。
标签: c++ initialization stdvector stdstring list-initialization