使用以下命令初始化字符串有什么区别:
std::string testString = "Test";
和
std::string testString{"Test"};
这只是语法糖还是实际上存在一些与性能相关的差异?
答案 0 :(得分:4)
{}
初始化语法称为统一初始化语法,它有一些关键差异,但在代码中它们都做同样的事情 - 从字符串构造一个std::string
对象文字"Test"
使用赋值初始化对象与将右侧括在括号中并构造对象基本相同。例如,以下两个是相同的
T obj = a;
T obj(a);
所以你应该问自己,用以下两种方法构造字符串对象有什么区别
std::string{"Test"};
std::string("Test");
答案是上面的结构都是相同的,并为std::string
有关统一初始化的更多信息,请参阅https://softwareengineering.stackexchange.com/questions/133688/is-c11-uniform-initialization-a-replacement-for-the-old-style-syntax
答案 1 :(得分:2)
这种特殊情况没有区别。但是试试
std::string s1(1, '0'); // calls string(size_type , char )
std::string s2{1, '0'}; // calls string(std::initializer_list<char> )
assert(s1.length() == 1 && s1[0] == '0');
assert(s2.length() == 2 && s2[0] == '\x1');
或std::vector
std::vector<int> v1(1); // calls vector(size_type )
std::vector<int> v2{1}; // calls vector(std::initializer_list<int> )
assert(v1.size() == 1 && v1[0] == 0);
assert(v2.size() == 1 && v2[0] == 1);
答案 2 :(得分:0)
它们之间没有区别。
由于语法高亮,大多数项目首选声明。
答案 3 :(得分:0)
我在Herb Sutter中找到了一个明确的答案