C++ 为什么我们需要一个const对象的用户提供的构造函数?

C++ 为什么我们需要一个const对象的用户提供的构造函数?,c++,C++,该语言的规则规定,用户定义类的const的定义需要进行值初始化或具有用户提供的默认构造函数 const结构X{int v;}X; 如果你不给它一个值,那么你就永远不能给v一个值,因为它不能被变异。但是,我们如何从用户提供的构造函数中获益呢 const结构X{X(){}int v;}X; 这仍然是默认的构造v,这将使其保持未初始化状态。在没有构造函数没有好处的情况下,为什么我们需要这个构造函数来编译它呢?在第一种情况下,编译器可以从类定义(而不是任何成员的定义)判断变量不会被初始化。为了定义变

该语言的规则规定,用户定义类的
const
的定义需要进行值初始化或具有用户提供的默认构造函数

const结构X{int v;}X;
如果你不给它一个值,那么你就永远不能给
v
一个值,因为它不能被变异。但是,我们如何从用户提供的构造函数中获益呢

const结构X{X(){}int v;}X;

这仍然是默认的构造
v
,这将使其保持未初始化状态。在没有构造函数没有好处的情况下,为什么我们需要这个构造函数来编译它呢?

在第一种情况下,编译器可以从类定义(而不是任何成员的定义)判断变量不会被初始化。为了定义变量,类定义必须是可用的,因此,如果在这种情况下,
const
变量未初始化,说明程序格式错误的规则很简单

在第二种情况下,它需要用户声明的构造函数的定义来确定它是否初始化。当编译器处理变量定义时,这不一定可用,因此通常无法检查构造函数是否初始化所有内容;构造函数定义不一定可用。通常情况下,即使在这样的情况下也不需要进行诊断,因为构造函数的定义是可用的,编译器可以找到它