std::vector<std::string> vec{3}; 是什么意思?实际上呢?
What does std::vector<std::string> vec{3}; actually do?
我目前正在尝试了解 C++11 中的列表初始化,我偶然发现了这行代码:std::vector<std::string> vec{3};
我想知道它实际上在做什么,我注意到在vector 但是,我不确定这些元素将被初始化的原因和值是什么。
编辑:
我试过 运行:
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
vector<T>
有一个接受单个整数的构造函数;它创建一个包含 3 个默认初始化的 T
的向量。因此,当您使用等同于 vector<T>{3}
.
的语法时,此构造函数是可行的候选构造函数
但是,使用 {}
语法意味着首先检查任何采用 initalizer_list
的 vector<T>
构造函数。如果 vector<T>
中的 T
是整数类型,{3}
将映射到 vector<T>
的 initializer_list<T>
构造函数。
但是由于 T
在这种情况下是 std::string
,vector<std::string>
的 initializer_list
构造函数不匹配整数。因此,改为调用 N 元素构造函数。
为避免将来出现此类情况,您应该避免将 {}
用于容器和类似容器的类型,除非您打算使用一系列元素来初始化它们。
If they are default initialized shouldn't the output be:
没有。默认初始化的 std::string
不包含任何字符。不是“0”字符,没有字符。如果你打印出一个不包含任何字符的字符串,那么你什么也没有打印出来。
当您在 C++ 中初始化字符串向量时,它们将默认为空字符串,或 ""
。如果您尝试打印
std::cout << "";
你什么也得不到。这基本上就是这里发生的事情。每个索引只是一个打印空字符串的空字符串。
我目前正在尝试了解 C++11 中的列表初始化,我偶然发现了这行代码:std::vector<std::string> vec{3};
我想知道它实际上在做什么,我注意到在vector 但是,我不确定这些元素将被初始化的原因和值是什么。
编辑: 我试过 运行:
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
vector<T>
有一个接受单个整数的构造函数;它创建一个包含 3 个默认初始化的 T
的向量。因此,当您使用等同于 vector<T>{3}
.
但是,使用 {}
语法意味着首先检查任何采用 initalizer_list
的 vector<T>
构造函数。如果 vector<T>
中的 T
是整数类型,{3}
将映射到 vector<T>
的 initializer_list<T>
构造函数。
但是由于 T
在这种情况下是 std::string
,vector<std::string>
的 initializer_list
构造函数不匹配整数。因此,改为调用 N 元素构造函数。
为避免将来出现此类情况,您应该避免将 {}
用于容器和类似容器的类型,除非您打算使用一系列元素来初始化它们。
If they are default initialized shouldn't the output be:
没有。默认初始化的 std::string
不包含任何字符。不是“0”字符,没有字符。如果你打印出一个不包含任何字符的字符串,那么你什么也没有打印出来。
当您在 C++ 中初始化字符串向量时,它们将默认为空字符串,或 ""
。如果您尝试打印
std::cout << "";
你什么也得不到。这基本上就是这里发生的事情。每个索引只是一个打印空字符串的空字符串。