使用空的 {} 来初始化向量有什么不同?

Vin*_*Lim 3 c++ stl

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

例如:

#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 
}
Run Code Online (Sandbox Code Playgroud)

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

汇编代码屏幕截图在这里

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

Zuo*_* Hu 5

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