功能超载不起作用

Function overloading not working

本文关键字:不起作用 超载 功能      更新时间:2023-10-16

我对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];
};

在我的示例中,我有两个函数调用。

test t;
const char *t1 = t.data();
char* t2 = t.data();

我的输出是char* data()两次。有人可以解释我发生了什么事吗?为什么const char* data() const从未被调用?

感谢您的帮助。

因为t不是const,因此您获得了该方法的非const过载。请注意,返回类型的构成不参与过载分辨率,您可以将char*转换为const char*

如果您要尝试此

const test t;
const char *t1 = t.data();

您将获得const超载,这不会编译:

char* t2 = t.data();

const版本仅在const对象上调用。

const test t;
t.data();
test t;
t.data();
static_cast<const test>(t).data();

这将为您带来理想的结果,您无需将其作为暂时存储,如其他答案中所示。

http://ideone.com/xddacr