gpt4 book ai didi

c++ - C++ 函数重载中的意外行为

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:19 25 4
gpt4 key购买 nike

考虑以下代码。

class MyClass1
{
public:
MyClass1(const int& i)
{
myVar = i;
}

const int& get() const
{
std::cout<<"Inside 1 \n";
return myVar;
}

int get()
{
std::cout<<"Inside 2 \n";
return myVar;
}

private:
int myVar;
};

class MyClass2
{
public:
MyClass2(const int& i)
{
myVar = i;
}

const int& get()
{
std::cout<<"Inside 3 \n";
return myVar;
}

int get() const
{
std::cout<<"Inside 4 \n";
return myVar;
}

private:
int myVar;
};


int main(int argc, char* argv[])
{

MyClass1 myClass1(10);
int tmp1 = myClass1.get();
const int& tmp2 = myClass1.get();


MyClass2 myClass2(10);
int tmp3 = myClass2.get();
const int& tmp4 = myClass2.get();

return 0;
}

输出显示如下。

Inside 2 
Inside 2
Inside 3
Inside 3

对于“const int& tmp2 = myClass1.get();”我预计它将在 MyClass1 中打印调用“const int& get() const”。令我惊讶的是,它在 MyClass1 的两种情况下都调用了“int get()”。在 MyClass2 中,我交换了“const”,然后我发现在函数调用中它称为“const int& get()”。为什么会这样?

最佳答案

For "const int& tmp2 = myClass1.get();" I expected that it will print call "const int& get() const" in MyClass1.

您没有解释为什么会这样,但您当然不应该这样做。有两个 get 函数不带参数,一个 const ,另一个不带参数。由于 myClass1 不是 const,因此调用不是 const 的函数。

如果不是这样,就没有必要允许两个具有相同名称和相同参数的类成员函数仅在一个是 const 而另一个不是'

关于c++ - C++ 函数重载中的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41492009/

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