我有一个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)