最近我看到了这段代码,但不太理解其中的含义。
auto c = vector<int> {};
向量构造函数返回什么?
那么这段代码:
c = vector<int> {1,2,3,4,5 };
第二个 c
是否在不同的内存位置上与最初的 c
?
当 c
被重新初始化时,析构函数是否会被调用?
我搜索了互联网,但找不到以上代码的任何示例。
以上内容与下面的内容有何不同:
vector<int> c {};
非常感谢您提前的帮助。
"正如jrd1所说,这是C++11的一个特性。
关键字auto
基本上意味着您让编译器“猜测”变量的类型。
因此,c
是一个常规的vector<int>
。"
&c
不会改变,但 c.data()
可能会改变。 - ComicSansMSauto c = vector<int> {};
'第二个c'只是对变量c的值进行重新赋值。它不是一个新的变量,因此c的内存地址不会改变,也不会调用c的析构函数。
c = vector<int> {1,2,3,4,5 };
c = vector<int> {1,2,3,4,5 };
c不会被销毁,也不会在新的内存操作中被定位。
发生的是将创建一个未命名的第二个向量,其中包含5个值,并使用vector::operator=
将该向量的内容分配给c。这将以C++11中的移动操作方式进行。之后,临时向量将被销毁并调用其析构函数,但不会调用c的析构函数。
auto itr = vec.iterator(); // instead of vector<int>::iterator itr
auto c = vector<int> {};
和vector<int> c{};
之间的区别,请参阅Herb Sutter的Almost Always Auto风格。 - Angew is no longer proud of SO