在c ++ 11中,brace-init是否存在任何效率问题?

时间:2014-03-16 16:42:47

标签: c++ c++11 list-initialization

我正在考虑将中型代码库重构为始终使用大括号初始化。我应该注意哪些效率问题?

一些例子可能是POD类型和内置类型,那么具有大量构造参数的大型类呢?

1 个答案:

答案 0 :(得分:1)

这取决于你的意思"总是使用大括号初始化"。如果你转换像

这样的构造函数
X x(a, b, c);

X x{a, b, c};

(并且由于选择了不同的构造函数,行为不会发生变化),因此生成的代码不应该变得更高或更低效。另一方面:

std::vector<std::string> v{
    "long character string a",
    "long character string b",
    "long character string c"};

可能效率低于

std::vector<std::string> v;
v.push_back("long character string a");
v.push_back("long character string b");
v.push_back("long character string c");

由于提到的@dyp问题,该向量无法移出initializer_list