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

查看:114
本文介绍了带有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;
 }


推荐答案

只对非指针的constness,非引用类型。

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天全站免登陆