使用空的{}来初始化向量是不同的吗



我看到有些人倾向于用空{}初始化向量,我想知道这是否与直接用默认构造函数初始化不同?

例如:

#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> vec;
vector<int> vec2 {};
cout << sizeof(vec) << " " << sizeof(vec2) << endl; // 24 24
cout << vec.size() << " " << vec2.size() << endl;   // 0 0 
}

我检查了它的汇编代码,它表明用空{}初始化向量会生成更多的代码(https://godbolt.org/z/2BAWU_)。

组装代码屏幕截图

我对C++语言还很陌生,如果有人能帮我,我将不胜感激。

使用大括号是值初始化。不使用它们是默认初始化。正如有人在评论中提到的那样,当为vector启用优化时,他们应该生成完全相同的代码。内置类型(如指针和int(有一个显著的区别;默认初始化不执行任何操作,而值初始化将它们分别设置为nullptr和零。

最新更新