作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
int x = 12;
12
据说是整数文字,因此不能在 LValue 中使用。
最佳答案
好的问题中的错误示例。
但问题仍然有效:
让我们试试:
Foo getFoo() {return Foo();}
int func()
{
getFoo().bar(); // Creates temporary.
// before this comment it is also destroyed.
// But it lives for the whole expression above
// So you can call bar() on it.
}
int func2()
{
Foo const& tmp = getFoo(); // Creates temporary.
// Does not die here as it is bound to a const reference.
DO STUFF
} // tmp goes out of scope and temporary object destroyed.
// It lives to here because it is bound to a const reference.
How does the compiler allocate memory to a temporary object?
编译器未定义。
但是在栈帧上分配更多的内存并保存在那里真的很容易。然后销毁它并减小堆栈帧的大小(尽管这个答案对底层硬件做了很多你不应该做的假设(最好只是把它想象成编译器在施展魔法))。
What is the scope of a temporary object?
临时对象一直存在到表达式结束(通常是 ;
),除非它绑定(bind)到一个 const 引用。如果它绑定(bind)到一个 const 引用,那么它也将存在于该引用所属范围的末尾(有一些异常(exception)(如构造函数))。
Why can't we get its address with an &12 in its scope?
题中的12不是临时对象。
它是一个整数文字。
关于c++ - 文字值的范围是什么,编译器如何为其分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8571796/
我是一名优秀的程序员,十分优秀!