-
Notifications
You must be signed in to change notification settings - Fork 63
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于const引用的问题 #83
Comments
|
多谢大大。
|
|
菜鸡补充一点 |
多谢两位解惑。 跳到书的13.6.1章节,看到右值引用描述,觉得可以用右值和左值来理解。 还得继续学习拷贝、赋值、销毁和移动对象这些内容 :)。 |
@pezy 再次请教一下,关于函数返回引用的问题。 int& func()
{
int i = 0;
return i;
}
int main()
{
int ri = func();
std::cout << ri << std::endl;
} 我在VS2012-64位版本编译和运行没有问题,但是在G++-8.1.1编译,会报警告 这是为什么?函数 |
说的没错啊,你运行一下试试看?肯定 segmentation fault 了吧? 另,VS2012 也太老了,好歹也用个 2015 啊。 |
编译和运行都没有问题。在配置里设置的编译警告是/W3,后来改成/W4,能看到警告,但是运行还是没有问题,正常。 在SO问了这个问题,根据大神的说法,了解了这个属于C++的Undefined behavior,不同的编译器可能处理不同。 |
另外可以看看之后有一个人问的SO - Passing non-lvalue as const reference argument. Is the temp created in local scope or caller scope?,关于 总结来说,临时量的声明周期不会因为第二次引用而延长,后面对临时量的引用都可能导致dangling reference。 |
可参考: https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/
(最佳)实践一般不单独返回引用(大概率是用错了),而是和输入引用搭配用来级联调用,比如常见的输入输出流:
而对于const Type &作为返回值应用比较多一些,用起来来比Type &作为输入函数要简单点(少了一步变量声明和初始化动作) |
@ender233 多谢分享。确实,对于引用来说多数是作用于函数形参和返回值。 对于引用延长临时生命周期,确实是会,不过有三种异常情况。 总结一下就是
你链接的那篇文章,里面的代码并不是返回一个引用,而是一个字面量。 |
无论是字面量还是局部对象,都在栈上,都可以用const Type &绑定。 |
《C++ Primer》中文版第五版第 2.4.1 章里 const的引用,有几点疑惑:
虽然后面解释了C++会创建一个常量类型的临时量,但是这里有一个计算
r1 * 2
,所以这里意思是如果表达式里有常量,会把字面量(这里是2)也设置为常量吗?The text was updated successfully, but these errors were encountered: