C++ 中将值作为常量、引用和常量引用返回有何含义?

2024-03-26

我正在学习C++,但我仍然对此感到困惑。在 C++ 中将值作为常量、引用和常量引用返回有何含义?例如:

const int exampleOne();
int& exampleTwo();
const int& exampleThree();

以下是您所有案件的内幕:

• 通过引用返回:函数调用可以用作赋值的左侧。例如使用运算符重载,如果你重载了operator[],你可以这样说

a[i] = 7;

(通过引用返回时,您需要确保返回的对象在返回后可用:您不应该返回对本地或临时的引用)

• 作为常量值返回:防止函数在赋值表达式的左侧使用。考虑重载的运算符+。人们可以写这样的东西:

a + b = c; // This isn't right

将operator+的返回类型设置为“const SomeType”允许按值返回,同时防止在赋值的左侧使用表达式。

返回为常量值还可以防止如下拼写错误:

if (someFunction() = 2)

当你的意思是

if (someFunction() == 2)

如果 someFunction() 声明为

const int someFunction()

那么上面的 if() 拼写错误将被编译器捕获。

• 作为常量引用返回:此函数调用不能出现在赋值的左侧,并且您希望避免进行复制(按值返回)。例如。假设我们有一个 Student 类,我们想提供一个访问器 id() 来获取学生的 ID:

class Student
{
    std::string id_;

public:

    const std::string& id() const;
};

const std::string& Student::id()
{
    return id_;
}

考虑 id() 访问器。应将其声明为 const 以保证 id() 成员函数不会修改对象的状态。现在,考虑返回类型。如果返回类型是 string& 那么可以写如下:

Student s;
s.id() = "newId";

这不是我们想要的。

我们可以按值返回,但在这种情况下按引用返回更有效。将返回类型设置为 const string& 还可以防止 id 被修改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中将值作为常量、引用和常量引用返回有何含义? 的相关文章

随机推荐