Functions with const arguments and Overloading(带有 const 参数和重载的函数)
问题描述
正在试用 stackeroverflow qn 所以它让我思考为什么不重载该函数,我想出了一个稍微不同的代码,但它说该函数不能被重载.我的问题是为什么?或者有其他方法吗?
Was tryin out the stackeroverflow qn so it got me thinking why not overload the the function and I came up with a slightly different code but it says the function cannot be overloaded. My question is why? or is there a another way?
#include <iostream>
using std::cout;
class Test {
public:
Test(){ }
int foo (const int) const;
int foo (int );
};
int main ()
{
Test obj;
Test const obj1;
int variable=0;
do{
obj.foo(3); // Call the const function
obj.foo(variable); // Want to make it call the non const function
variable++;
usleep (2000000);
}while(1);
}
int Test::foo(int a)
{
cout<<"NON CONST"<<std::endl;
a++;
return a;
}
int Test::foo (const int a) const
{
cout<<"CONST"<<std::endl;
return a;
}
推荐答案
不能仅基于非指针、非引用类型的常量性进行重载.
You can't overload based only on the constness of a non pointer, non reference type.
想想如果你是编译器.面对线:
Think for instance if you were the compiler. Faced with the line:
cout <<obj.foo(3);
你会调用哪个函数?
当您按值传递时,值会以任何方式复制.参数上的 const 仅与函数定义相关.
As you are passing by value the value gets copied either way. The const on the argument is only relevant to the function definition.
这篇关于带有 const 参数和重载的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:带有 const 参数和重载的函数
基础教程推荐
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17