在大括号中返回构造函数参数?

luc*_*obz 5 c++ constructor return curly-braces c++11

我是 C++ 的新手,大括号初始化(或统一初始化)确实令人困惑。当函数返回花括号中的参数列表时究竟会发生什么?非常感谢您的澄清。

std::vector<double> foo()
{
  return {1, 2}; // is this the same as: std::vector<double>{1, 2} or std::vector<double>(1, 2)? or something else?
}
Run Code Online (Sandbox Code Playgroud)

son*_*yao 7

return {1, 2};,返回值是从列表初始化{1, 2},作为效果,返回的std::vector<double>包含 2 个值为1和 的元素2

return std::vector<double>{1, 2};,返回值是从复制初始化std::vector<double>{1, 2},作为效果,返回的std::vector<double>包含 2 个值为1和 的元素2。从概念上讲,它将构造一个临时对象std::vector<double>,并且返回值是从临时对象复制初始化的;由于强制复制省略(C++17 起),复制/移动操作被省略,效果与第一种情况完全相同。

return std::vector<double>(1, 2),返回值是从 复制初始化的std::vector<double>(1, 2),作为效果,返回的std::vector<double>包含 1 个值为 的元素2。强制复制省略在这种情况下也有效。