gpt4 book ai didi

c++ - 具有 const 参数的函数重载(跟进)

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:05 33 4
gpt4 key购买 nike

这是 Previous Question 的跟进

它变得非常复杂,所以我开始一个新线程来使我的观点更清楚。(不想删除以前的线程,因为其他提供有值(value)反馈的人不会失去他们获得的声望点数)

更新后的代码:(符合并有效)

#include <iostream>
using std::cout;

class Test {
public:
Test(){ }
int foo (const int) const;
int foo (int );
};

int main ()
{
Test obj;
int variable=0;
int output;
do{
output=obj.foo(3); // Call the const function
cout<<"output::"<<output<<std::endl;
output=obj.foo(variable); // Want to make it call the non const function
cout<<"output::"<<output<<std::endl;
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;
}

输出(我得到):

NON CONST
output::4
NON CONST
output::1
NON CONST
output::4
NON CONST
output::2
NON CONST
output::4
NON CONST
output::3
NON CONST
output::4
NON CONST
output::4
NON CONST
output::4
NON CONST
output::5

输出(我想要/想到的)

CONST
output::3
NON CONST
output::1
CONST
output::3
NON CONST
output::2
CONST
output::3
NON CONST
output::3
CONST
output::3
NON CONST
output::4
CONST
output::3
NON CONST
output::5

希望我已经更好地提出了我的问题。我知道其他方法。但这可能吗?

最佳答案

在 C++ 中,函数签名

int Test::foo (const int a) const

int Test::foo (int a) const

被认为是完全相同的。

参数上的 const 被忽略的原因是因为它不能以任何方式影响调用者。由于参数是按值传递的,因此会复制调用者提供的值。对于调用者而言,被调用函数是否可以更改该拷贝在任何方面都没有关系。出于这个原因,C++ 忽略函数参数上的顶级 const 限定(如果传递引用,则不会出现顶级 const),甚至可以做到这一点int foo(int); 被认为是函数的正确原型(prototype)

int foo(const int)
{
/* ... */
}

简而言之,在 C++ 中不可能根据(值)函数参数的常量性来重载函数。要获得所需的输出,您可以考虑为非常量重载使用非常量引用参数。

关于c++ - 具有 const 参数的函数重载(跟进),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683881/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com