如何正确理解这个代码片段?
#include <vector>
#include <iostream>
#ifdef MORE_QUESTION
void f(std::initializer_list<int> const &items){};
void g(std::vector<int> const &items){};
#endif
struct foo {
template<typename T>
foo(std::initializer_list<T>) {std::cout << "here" << std::endl;}
};
int main()
{
foo x{1,2,3}; // What's this?
#ifdef MORE_QUESTION
f({1,2,3,4});
g({1,2,3,4});
#endif
}有关上述代码片段的问题:
什么是foo x{1,2,3};?
发布于 2022-05-03 14:09:27
foo ({1,2,3,4});外部()表示调用构造函数,内部{}表示std::initializer_list的对象。对于foo x{1,2,3},我完全糊涂了。-
不,“外层()”和“内部{}”的含义与你所描述的不完全一样。这些示例是C++中两种(多种)变量初始化。outer {}和outer ()只告诉您要使用哪种初始化,没有其他:
T var( stuff ); // direct-initialization
T var{ stuff }; // direct-list-initialization每种方法都可以从许多不同类型的stuff中以许多不同的方式初始化大量Ts。长时间阅读,初始化和初始化
在stuff可以做的许多事情中,它可以是逗号分隔的表达式列表(如1,2,3 ),也可以是以大括号括起来的以逗号分隔的表达式列表(如{1,2,3} )。
T var( 1,2,3 ); // works for some T
T var( {1,2,3} ); // works for some T
T var{ 1,2,3 }; // works for some T
T var{ {1,2,3} }; // works for some T您的类型foo恰好支持这4种初始化类型中的3种,因为在本例中,它们都调用了您提供的相同的initializer_list构造函数。另外,他们中没有一个人会处理任何initializer_list。
https://stackoverflow.com/questions/72084756
复制相似问题