我正在学习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(使用前将#替换为@)