为什么const对象必须具有用户提供的构造函数
Why const object must have a user-provided constructor?
可能重复:
声明类的const实例
为什么C++需要用户提供的默认构造函数来默认构造const对象?
我的程序是这样的:
class c
{
};
int main()
{
const c a;
return 0;
}
当我使用g++编译它时,它会提示:
main.cpp:10:7: note: ‘const class c’ has no user-provided default constructor
为什么,这只是一个空类,什么都不做,为什么我必须提供一个用户提供的构造函数。
因为语言规则是这么说的。
常量必须在定义中设置其值,因为以后不能为其赋值。如果没有显式提供值,则该类型必须具有默认构造函数。
你不需要。这只是一个提示,甚至不是一个警告。其基本原理是该类不能做任何有用的事情,而这很少是有意的。GCC只是检查一下你是否忽略了什么。
相关文章:
- 参数包构造函数在类模板中隐藏用户定义的转换
- 为用户定义的类正确调用复制构造函数/赋值运算符
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 创建用户定义的复制构造函数时无法创建对象
- C++中用户定义的构造函数出现问题
- 如何使用构造函数声明指向用户定义对象的指针?
- 自定义异常中的用户定义的空构造函数,具有多个继承和抽象基类
- 用户定义的构造函数重载与参数超类的重载不匹配
- =删除用户定义的成员功能,除了构造函数,分配运算符C 11
- C++使用默认的复制构造函数,即使用户使用模板定义了一个复制构造函数
- 作为传递给 CPP 类构造函数的参数的用户定义函数
- 使用用户定义的构造函数初始化C++结构
- 用户定义类的构造函数不使用矢量
- 为什么复制构造函数不是微不足道的,因为有一个用户定义的析构函数?
- 隐式用户定义的转换不起作用,因为在编译C 时无法识别运算符和转换构造函数
- 为什么转换涉及两个用户定义的转换功能/构造函数
- 保证复制责任的行为是否取决于用户定义的复制构造函数的存在
- 如何使用Chaiscript中用户类型的std :: initializer_list调用构造函数
- 默认构造函数 Eclipse 项目中的用户输入
- 为什么'std::p air'允许使用用户定义的已删除移动构造函数从类类型的右值初始化?