带有 const 参数和重载的函数 [英] Functions with const arguments and Overloading

查看:27
本文介绍了带有 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 参数和重载的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆