为什么编译器没有为包含常量数据成员的类添加默认构造函数。
请参阅下面的代码,因为我已经声明了常量数据成员“a”,并且在尝试为类“ClassA”创建对象时,它说没有可用的适当的默认构造函数。请帮忙。
#include "stdafx.h"
#include <iostream>
using namespace std;
class ClassA
{
private:
const int a;
public :
void print()
{
cout << "hello world" << endl;
}
};
int main()
{
ClassA obj;
obj.print();
return 0;
}
C++03 规则在 12.6.2/4 [class.base.init] 中指定。如果类的非静态成员未在构造函数的成员初始值设定项列表中提及,那么如果它是const
合格的它必须是具有用户声明的构造函数的非 POD 类类型,否则程序将格式错误。隐式定义的构造函数是用空成员初始值设定项列表(和空主体)定义的,因此在这种情况下,导致隐式声明的默认构造函数被隐式定义,也会导致程序格式错误。
C++11 规则相当于同样的事情。未在成员初始值设定项列表中指定的非静态数据成员是默认初始化。在 C++11 8.5/6 [dcl.init] 中,“[...] 如果程序调用 const 限定类型的对象的默认初始化T
, T
应是具有用户提供的默认构造函数的类类型。”在本例中归结为相同的规则。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)