当前位置:  开发笔记 > 编程语言 > 正文

为什么这个const成员函数允许修改成员变量?

如何解决《为什么这个const成员函数允许修改成员变量?》经验,为你挑选了1个好方法。

const成员函数是一个不会改变其成员变量的成员函数.

成员函数上的const并不意味着const char*.这意味着您无法更改指针所包含的地址中的数据.

您的示例不会改变成员变量本身.

成员函数上的const将确保将所有成员变量视为const.

这意味着如果你有:

int x;
char c;
char *p;

然后你将有:

const int x;
const char c;
char * const p; //<-- means you cannot change what p points to, but you can change the data p points to

有两种类型的const指针.const成员函数使用我上面列出的那个.


一种获取所需错误的方法:

尝试改变:

char * rep;

至:

char rep[1024];

并删除此行:

rep = new char [strlen(s)+1];

它会抛出你期望的错误(因为const关键字而无法修改成员)

因为只有一种类型的const数组.这意味着您无法修改任何数据.


现在整个系统实际上已经破坏了以下示例:

class String
{

    private:
        char rep2[1024];
        char* rep;

 ...


 String :: String (const char* s)
 {
    rep = rep2;
    strcpy (rep, s); 
 }

因此,这里要学习的教训是,成员函数上的const关键字不能确保您的对象根本不会发生变化.

它只确保将每个成员变量视为const.对于指针,const char*和char*const之间存在很大差异.

大多数情况下,const成员函数意味着成员函数不会修改对象本身,但并非总是如此,如上例所示.



1> Brian R. Bon..:

const成员函数是一个不会改变其成员变量的成员函数.

成员函数上的const并不意味着const char*.这意味着您无法更改指针所包含的地址中的数据.

您的示例不会改变成员变量本身.

成员函数上的const将确保将所有成员变量视为const.

这意味着如果你有:

int x;
char c;
char *p;

然后你将有:

const int x;
const char c;
char * const p; //<-- means you cannot change what p points to, but you can change the data p points to

有两种类型的const指针.const成员函数使用我上面列出的那个.


一种获取所需错误的方法:

尝试改变:

char * rep;

至:

char rep[1024];

并删除此行:

rep = new char [strlen(s)+1];

它会抛出你期望的错误(因为const关键字而无法修改成员)

因为只有一种类型的const数组.这意味着您无法修改任何数据.


现在整个系统实际上已经破坏了以下示例:

class String
{

    private:
        char rep2[1024];
        char* rep;

 ...


 String :: String (const char* s)
 {
    rep = rep2;
    strcpy (rep, s); 
 }

因此,这里要学习的教训是,成员函数上的const关键字不能确保您的对象根本不会发生变化.

它只确保将每个成员变量视为const.对于指针,const char*和char*const之间存在很大差异.

大多数情况下,const成员函数意味着成员函数不会修改对象本身,但并非总是如此,如上例所示.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有