在附加的代码片段中,我预计:std::vector<C> d = { {} };会导致编译器错误,因为B无法默认构造。那么如果没有错误,我希望d.size()是1。这是意外行为还是我错过了一些不言而喻的事情?
#include <array>
#include <algorithm>
#include <iostream>
#include <vector>
struct A {};
struct B {
B( int ) {}
};
struct C {
A a;
B b;
};
int main() {
::std::vector<C> d = { {} }; //ok?!?!
//::std::vector<C> d2 = { C() }; Error
//C c; Error
//d.push_back( {} ); Error
//d.push_back( { {}, { 3 } } ); Ok
return d.size(); // 0 instead of expected 1
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)::std::vector<C> d = { {} };
正在调用https://en.cppreference.com/w/cpp/container/vector/vector的第 10 个构造函数:
vector( std::initializer_list<T> init,
const Allocator& alloc = Allocator() );
Run Code Online (Sandbox Code Playgroud)
内部{}是空的std::initializer_list,外部{ }是复制列表初始化形式 6。
专业提示:使用正确配置的 IDE,您可以“转到符号的定义”。我将光标放在第一个上{,然后单击“转到定义”,然后我的 IDE 使用初始化器列表跳转到正确的向量构造函数。将光标放在第二个{并“转到定义”,跳转到initializer_list构造函数。
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |