C++ 11的“默认”只能应用于特殊的成员函数吗?

问题描述:

=default只适用于特殊会员功能吗?我试了下面,但没有编译:C++ 11的“默认”只能应用于特殊的成员函数吗?

struct A{ 
    A(int, char)=default; 
    int i; 
    char c; 
}; 

是的,你只能明确地默认特殊的成员函数。从[dcl.fct.def.default]:

被明确地默认应
(1.1)的函数 - 是一个特殊的成员函数,

毕竟,只有特殊成员函数暗含默认 - 所以为什么它会明确明确默认别的?

在这种情况下,您可以简单地删除构造函数并使A成为一个聚合。这将允许您使用列表初始化(A a{42, 'c'};)。