gpt4 book ai didi

c++ - 文字值的范围是什么,编译器如何为其分配内存?

转载 作者:太空狗 更新时间:2023-10-29 19:46:40 24 4
gpt4 key购买 nike

int x = 12;

12 据说是整数文字,因此不能在 LValue 中使用。

  1. 编译器如何为文字分配内存?
  2. 文字的范围是什么?
  3. 为什么我们不能在它的作用域中得到一个 &12 的地址?

最佳答案

好的问题中的错误示例。
但问题仍然有效:
让我们试试:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com