从计数和元素值初始化 std::vector 与副本

Initializing a std::vector from a count and an element value with copies?

本文关键字:std vector 副本 初始化 元素      更新时间:2023-10-16
vector<string> vec(10, string(10, 'a'));

我的问题是关于string(10, 'a')

  • 它是否返回匿名变量?
  • 当初始化语句结束时,变量将被清除吗?
  • 它会被复制到向量吗?
  • 与 c++11 有什么不同(此时(?

它是否返回匿名变量?

不。它返回一个临时对象,该对象不是变量定义(§3.1/6 [基本](:

变量是通过声明引用而不是 非静态数据成员或对象的数据成员。变量的名称表示 引用或对象。

来源:C++11 工作草案 n3337

当初始化语句结束时,变量将被清除吗?

不,不会。它没有名字,在这一点上它已经被摧毁了。

它会被复制到向量吗?

是的,临时对象将被复制到向量中,然后销毁。这在原则上发生;在实践中,编译器可以优化临时对象的创建、复制和销毁,只要这样做不会影响可观察的行为。

与 c++11 有什么不同(此时(?

我不能确定,但我不记得 C++98、C++03 和 C++11 在这件事上有什么具体区别。