按位常量和成员函数常量之间的区别

问题描述

我正在读这本书,名为《 Effective C ++第三版55种特定的改进方法》,而在阅读本书时,我遇到了constness主题,但我无法理解重载之间的区别具有按位成员函数常数的const运算符[],

const char operator[](size_t t) 
    const{
         return text[t];
    }

和重载的非常量[],它不需要对常量做任何事情

char operator[](size_t t) 
    {
         return text[t];
    }

我尝试过在有和没有const和non-const重载[]的情况下进行一些操作,但是仍然没有看到任何区别,这仅仅是用来使代码可读吗?还是有什么区别呢?

这是我的String类

class String
{
    int len = 0;
    char text[];
    public : 

    String( const char c[])   
    {
        strcpy(text,c); 
        len  = strlen(text);
    }
    int length();
    const char operator[](size_t t) 
    const{
         return text[t];
    }
     
    char operator[](size_t t) 
    {
         return text[t];
    }
};

解决方法

const方法可以在const对象上调用,因为它们不会修改对象:

例如,如果您有Foo类:

class Foo {
  ...
  const methodA();
  methodB();
  ...
};

并像这样使用它:

Foo objectA;
const Foo objectB;

您可以在objectA上调用两个方法,但只能在objectB上调用methodA():

objectB.methodA();
objectB.methodB(); // <-- invalid

对运营商同样适用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...