C++ 对于构造函数,{}是否与=default相同?
在默认构造函数的定义中,isC++ 对于构造函数,{}是否与=default相同?,c++,c++11,C++,C++11,在默认构造函数的定义中,is=default与{}完全相同?是否存在可能有不同含义的情况 伪代码示例: template<typename... Args> struct S // maybe with base classes { S() = default; // S() {} - same or different? // other stuff... }; 模板 结构S//可能与基类一起使用 { S()=默认值; //S(){}-相同
=default代码>与{}
完全相同?是否存在可能有不同含义的情况
伪代码示例:
template<typename... Args>
struct S // maybe with base classes
{
S() = default;
// S() {} - same or different?
// other stuff...
};
模板
结构S//可能与基类一起使用
{
S()=默认值;
//S(){}-相同还是不同?
//其他东西。。。
};
它们是不同的。通过S(){}
,S
被认为具有用户提供的构造函数,而S()=默认值代码>不是。例如,S
是否符合聚合类型,这会产生不同。请参阅。另一点是,用户提供的默认构造函数无法满足琐碎的可构造性要求。这实际上取决于=default代码>发生。除了前面所说的,如果您有任何非静态数据成员,则这些成员是默认初始化的,而不是可以进行值初始化的值初始化。@user2864740做得好。我试着用几乎完全相同的方法进行搜索,但什么也没找到:|注意,dup中的所有讨论和下面的答案都假设默认发生在第一次声明中。看来,struct S{S();};S::S()=默认值代码>和结构{S();};S::S(){}
。