函数重载不起作用

cre*_*lem 3 c++

我有一个c ++函数重载的问题.这是一个示例类.

class test
{
public:
  const char* data() const
  {
    std::cout << "const char* data() const" << std::endl;
    return data_;
  }

  char* data()
  {
    std::cout << "char* data()" << std::endl;
    return data_;
  }
private:
  char data_[512];
};
Run Code Online (Sandbox Code Playgroud)

在我的例子中,我有两个函数调用.

test t;
const char *t1 = t.data();
char* t2 = t.data();
Run Code Online (Sandbox Code Playgroud)

我的输出是char* data()两次.有人能解释我发生了什么事吗?为什么const char* data() const从未被召唤过?

感谢帮助.

jua*_*nza 10

因为t不是const,所以你得到方法的非常量重载.请注意,返回类型的常量不参与重载决策,您可以转换char*const char*.

如果你试试这个

const test t;
const char *t1 = t.data();
Run Code Online (Sandbox Code Playgroud)

你会得到const重载,这将无法编译:

char* t2 = t.data();
Run Code Online (Sandbox Code Playgroud)