该语言的规则表示const
,用户定义类的定义需要进行值初始化或具有用户提供的默认构造函数。
const struct X { int v; } x;
如果您不给它一个,那么您将永远无法给它一个v
值,因为它不能被突变。但是我们将如何从用户提供的如下构造函数中受益:
const struct X { X() {} int v; } x;
这仍将是默认构造v
,这将使其保持未初始化状态。当没有没有构造器没有好处的时候,为什么我们需要这个构造器来进行编译?
在第一种情况下,编译器仅从类定义(而不是任何成员的定义)中就可以知道变量不会被初始化。必须使用类定义才能定义变量,因此很容易陈述一个规则,说如果const
在这种情况下未初始化变量,则程序格式错误。
在第二个中,将需要用户声明的构造函数的定义来确定是否初始化它。当编译器处理变量定义时,这不一定可用,因此,通常它无法检查构造函数是否初始化了所有东西。构造函数定义不一定可用。通常,即使在这样的情况下也不需要诊断,在这种情况下,构造函数的定义可用,编译器可以解决。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句