我遇到了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
从未被调用过?
感谢您的帮助。
答案 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();
这将为您提供所需的结果,您无需将其存储为临时存储,如另一个答案中所示。