从计数和带有副本的元素值初始化std :: vector?

时间:2014-11-03 09:46:30

标签: c++ c++11

vector<string> vec(10, string(10, 'a'));

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

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

1 个答案:

答案 0 :(得分:2)

  

是否返回匿名变量?

没有。它返回一个临时对象,它不是变量的定义(§3.1/ 6 [basic]):

  

变量是由引用声明引入的   非静态数据成员或对象。变量的名称表示   参考或对象。

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

  

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

不,它不会。它没有名字,到那时它已经被摧毁了。

  

它会被复制到向量?

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

  

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

我无法确定,但我不记得在这件事上C ++ 98,C ++ 03和C ++ 11之间有任何具体的区别。