考虑代码:
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::vector<std::string> v{{"awe", "kjh"}}; // not v{"awe", "kjh"}
std::cout << v.size() << std::endl;
return 0;
}
这段代码有错吗?或者在初始化向量时使用 double
{}
可能是有效的?我在 gcc 和 MSVC 上尝试了这段代码。 MSVC 2012 + complier Nov 2012 无法编译它,这并不奇怪。 使用 gcc 4.7 或 4.8 编译的这段代码在程序执行期间会出现“运行时错误”。这种行为正确吗?
std::vector<std::string> v{std::string{"awe", "kjh"}};
// not: std::vector<std::string> v{std::string{"awe"}, std::string{"kjh"}};
标准不需要这样的
std::string
类型实现的构造函数,因此基于特定的STD实现,我猜代码可以做不同的事情。
问候, &rzej
{}
被视为 std::string 构造函数。 如果你这样做的话,它会在运行时失败
std::string> s{"awe", "kjh"};