永发信息网

C++中const变量难道能随便赋值吗?

答案:5  悬赏:70  手机版
解决时间 2021-02-25 11:14
  • 提问者网友:喧嚣尘世
  • 2021-02-25 07:41
C++中const变量难道能随便赋值吗?
最佳答案
  • 五星知识达人网友:長槍戰八方
  • 2021-02-25 08:48
不是的,在对象生存期内是不可以改变的,过了生存期就是普通变量了。
在C++中,const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。
  const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类的声明中初始化const数据成员,因为类的对象没被创建时,编译器不知道const数据成员的值是什么。
  const数据成员的初始化只能在类的构造函数的初始化列表中进行。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现,或者static cosnt。
  

class Test
{
public:
Test():a(0){}
enum {size1=100,size2=200};
private:
const int a;//只能在构造函数初始化列表中初始化
static int b;//在类的实现文件中定义并初始化
const static int c;//与 static const int c;相同。
};

int Test::b=0;//static成员变量不能在构造函数初始化列表中初始化,因为它不属于某个对象。
cosnt int Test::c=0;//注意:给静态成员变量赋值时,不需要加static修饰符。但要加cosnt
全部回答
  • 1楼网友:洒脱疯子
  • 2021-02-25 11:48
这么长的程序,你有疑问在哪一行代码也不指出,真想让人从头到尾的看你的程序啊???
  • 2楼网友:長槍戰八方
  • 2021-02-25 11:03
(1) 这两个函数用 const Elephant* ptr 做参数一是让读者明白这两个函数不会改变指针所指向的内容;二是防止编程的误操作修改ptr指针指向的内容。
(2) const Elephant* temp_ptr 表示temp_ptr 指向的内容是常量不可改变,但是temp_ptr 本身可变,也就是可以temp_ptr = ptr->next 是正确的,但是*temp_ptr = 15 这样的赋值操作就是错误的。
PS:
Elephant * const temp_ptr 这样的定义是指针不可变,自始至终只能指向一块内存空间
const Elephant * const temp_ptr 这样定义是指针和指针指向的内容都不能改变。
  • 3楼网友:举杯邀酒敬孤独
  • 2021-02-25 10:17
const Elephant* ptr
这样是为了防止修改ptr指针指向的地址保存的值,如果你可以确保在这个函数中没有出现意外的修改ptr指向的内容,那么也可以不加const
而且这里的const不是对ptr而言的,而是对ptr指向的内容而言的,所以ptr还可以指向其它地址,如果是以下形式,那么ptr就不能指向其它地址了:
Elephant * const ptr
这种形式的定义说明,ptr是一个只读指针,它的指向不能更改,但是指向的内容可以更改,如果指向的地址和指向的地址保存的值都不想更改,就用以下形式:
const Elephant * const ptr
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯