gpt4 book ai didi

c++ - 为什么调用 `int* Get()` 而不是 `const int& Get()` ?

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

我有一个 B 类,它有两个方法,一个返回指向成员变量的指针,另一个返回对该变量的常量引用。

我尝试调用这些方法。在调用期间,我将返回值存储到相应的返回类型。

我期望适当的返回类型最终会调用适当的方法,但我收到一个编译错误:

error: invalid conversion from ‘int*’ to ‘int’ [-fpermissive]   const int& refval2 =  b.Get(); `

Here is my code:

#include <iostream>
class B{
public:
int* Get(){
return &x_;
}
const int & Get() const{
return x_;
}

private:
int x_ = 0;
};

int main(){
B b;
const int& refval2 = b.Get();
int* pval2 = b.Get();
}

最佳答案

Return type is not part of function signature , 它不在 overload resolution 中考虑.

In general, the candidate function whose parameters match the arguments most closely is the one that is called.

对于非静态成员函数调用,也涉及到被调用对象的类型。 Get() 有两种,一种是常量,一种是非常量。对于b.Get();,非const Get()是精确匹配;要调用 const Get(),必须将对象 b 转换为 const。然后非 const 获胜,之后编译器将尝试将返回的 int* 转换为 const int& 并失败。

所以

B b;
int* pval2 = b.Get(); // call to non-const Get()

const B cb;
const int& refval2 = cb.Get(); // call to const Get()

关于c++ - 为什么调用 `int* Get()` 而不是 `const int& Get()` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50499237/

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