功能超载不起作用
Function overloading not working
我对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
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- GLM超载操作员用于地图不起作用
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员&lt;&lt;这是一个iStream运算符
- 操作员=超载不起作用,除非对象已经初始化
- 功能超载不起作用