gpt4 book ai didi

C++ 相同的方法签名但不同的返回类型

转载 作者:可可西里 更新时间:2023-11-01 17:03:29 25 4
gpt4 key购买 nike

我看到了下面的代码:

template <class T>
class Type {
public:
Type() {}
T& operator=(const T& rhs) {value() = rhs; return value();}
T& value() {return m_value;}
T value() const {return m_value;}
private:
T m_value;
};

为什么编译器不报错

    T& value() {return m_value;}
T value() const {return m_value;}

以及如何知道调用了哪一个?

最佳答案

这两个函数其实是不一样的。只有第二个函数被声明为 const 成员函数。如果从中调用成员的对象是 const,则使用后一个选项。如果对象是非 const,则使用第一个选项。

例子:

void any_func(const Type *t)
{
something = t->value(); //second `const` version used
}

void any_func2(Type *t)
{
something = t->value(); //first non-`const` version used
}

如果两个函数都被声明为非const,或者都被声明为const,编译器(无论如何应该)提示。

关于C++ 相同的方法签名但不同的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264017/

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