大佬教程收集整理的这篇文章主要介绍了c – 为什么要立即初始化const变量?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这也是引用地址必须立即初始化的根本原因,因为地址是const.
但是我找不到为什么必须这样做的原因/为什么这个规则被强加了.
有人可以解释一下吗
const int size; //no initialization (error) size = 100; //error - you cAnnot assign a const variable.
现在,如果一个既不具有任何有意义的值的变量也不允许使它变得有价值,因为它是一个常量变量,那么这个变量是什么意思?这是完全没用的.
但是,只有内置和POD类型的情况@R_674_9811@:
struct A{}; //POD type struct B{ B(){} }; //Non POD type because it has user-defined constructor! const int i; //error - built-in type const A a; //error - POD type const B b; //ok - Non POD type //likewise const std::string s; //ok - std::string is a non-POD const std::vector<std::string> v; //ok - std::vector is a non-POD
实际上,NON-POD类型不能保持未初始化,因为将调用默认构造函数,并且对象将被初始化.
现在考虑这个结构,
struct C { const int i; C() {} };
C绝对是一个非POD类型,因为它具有用户定义的构造函数.还要注意,在构造函数中,它不会初始化i,它是int,声明为const.由于这个未初始化的const,以下将给出错误:
const c c; //error -
人们可能认为错误是因为const在上面声明的变量c中.但这是短视,不是真的.即使你删除const,它会给出错误:
C c; //error - same error
此分析还表明,即使内置类型是非POD类型的成员,内置类型也不会自动初始化.非POD类类也是如此.
而对于内置类型(和POD类型)的默认初始化语法@R_674_9811@:
struct C { const int i; C() : i() {} //note the Syntax - it is called member-initialization list };
现在这是允许的:
C x; //ok const c y; //ok
以上是大佬教程为你收集整理的c – 为什么要立即初始化const变量?全部内容,希望文章能够帮你解决c – 为什么要立即初始化const变量?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。