const关键字和重复方法签名

Del*_*ima 3 c++

我刚开始学习C++,从JAVA环境切换.

阅读一些Boost示例时,我发现在类中定义了以下两种方法:

const char* data() const
{
    return data_;
}

char* data()
{
  return data_;
}
Run Code Online (Sandbox Code Playgroud)

有两件事令我困惑.

首先是保留字const,我想我在这里理解.第一个const指的是char*哪个意味着我无法改变指针的值.第二个const告诉我,调用该函数不会改变我调用的对象的状态.这是正确的解释吗?

第二点混淆是为什么人们会有两个具有相同名称和签名的方法.编译器如何知道我打算调用哪一个?我怎么知道我是否被允许在打电话后更改数据data()而不知道我打了哪两个?

Tho*_*ews 6

第一个函数返回一个指向常量数据的指针.的const在函数签名的端部表示该函数将不会修改和类的数据成员.

第二个函数返回一个指向可变数据的指针.调用者可以使用指针来修改类成员变量.

搜索网络和SO搜索"const correctness".