C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 为什么要立即初始化const变量?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是一个一般的编程问题.我正在学习C,我已经学会了任何常量变量,即const int i或int * const ptr,必须立即被初始化.

这也是引用地址必须立即初始化的根本原因,因为地址是const.

但是我找不到为什么必须这样做的原因/为什么这个规则被强加了.

有人可以解释一下吗

解决方法@H_450_10@
因为没有办法可以初始化它,也可以分配一个值.
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

错误是因为C :: i被声明为const但尚未被初始化.

演示:http://ideone.com/NJT8L

此分析还表明,即使内置类型是非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

演示:http://ideone.com/84vD9

至于什么使一个struct / class POD,请参阅这个主题

> Can’t C++ POD type have any constructor?

大佬总结

以上是大佬教程为你收集整理的c – 为什么要立即初始化const变量?全部内容,希望文章能够帮你解决c – 为什么要立即初始化const变量?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。