【发布时间】:2021-04-17 08:17:28
【问题描述】:
请看下面的代码,帮助我理解: 为什么存在将 const 别名返回到像我的 f2 函数这样的文字的功能。我不明白重点是什么。 f2 和 f3 之间的区别在于 const 确实允许我在 return 语句中放置一个文字,但是为什么?
感谢任何帮助理解这一点。
#include <iostream>
const int f1(int a)
{
return 15;
}
const int& f2(int a)
{
return 14;
}
int& f3(int a)
{
a = 12;
return a;
}
int main()
{
auto a{ 10 };
auto b = f1(a);
auto c = f2(a);
auto d = f3(a);
std::cout << a << " " << b << " " << c << " " << d << std::endl;
a = 1;
b = 2;
c = 3;
d = 4;
std::cout << a << " " << b << " " << c << " " << d << std::endl;
}
【问题讨论】:
-
使用从
f2和f3返回的引用会导致未定义的行为。没什么好说的了。从f1返回const int没有意义。无论如何,一般来说,不同之处在于 const-lvalue-references 可能会绑定到临时变量(右值),而 non-const-lvalue-references 可能不会。 -
别名是类型的次要名称。你说的是引用。
-
一个好的编译器会警告你这段代码。此代码错误,可能会崩溃(请参阅末尾的“Segmentation fault”):wandbox.org/permlink/OAO8QVbZ3FgAJ4GX
-
谢谢大家的澄清。我知道代码存在重大问题,但我不清楚为什么允许它,以及实际发生了什么。再次感谢您。
标签: c++ function return constants