函数重载不起作用

时间:2014-01-21 17:10:35

标签: 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];
};

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

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

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:10)

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

如果你试试这个

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

你会得到const重载,这不会编译:

char* t2 = t.data();

答案 1 :(得分:4)

只会在const对象上调用const版本。

const test t;
t.data();

答案 2 :(得分:0)

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

这将为您提供所需的结果,您无需将其存储为临时存储,如另一个答案中所示。

http://ideone.com/XDdacr