常量是否有C ++临时右值

MathFromScratch

将文字常量/基本类型分配给变量时,是否会在C ++中生成临时变量?这在C ++规范(c ++ 98,c ++ 11,c ++ 14,c ++ 17等)之间是否有所不同?

int a = 1; // 1 here is likely loaded in microcode level, right? But not guaranteed not to generate a temp value

int b = 1+2; // evaluated to 3 at compile time as const, also 3 might not exist in microcode. Likely temp value

auto c = 3; // creates an int based on 3. No temp value

int a{1}; //no temp value?

我正在阅读https://herbsutter.com/2013/05/13/gotw-2-solution-temporary-objects/

另外,我认为我在所有这些方面都是完全错误的

哦,有人需要小up

如果我们要具体一点,我们必须区分临时对象临时值临时对象属于类类型这就是C ++标准讨论的内容,也是人们谈论“临时人员”时通常所说的意思。当人们谈论临时价值时,他们真正的意思是中间结果即从寄存器中交换值。

您的所有示例:

int a = 1;
int b = 1+2;
auto c = 3;
int d{1};

不要创建任何“临时文件”,因为不必创建任何临时文件。“ 1 + 2”可能会折叠成一个常数。甚至不必生成任何操作码。该程序的最小汇编为:

a:
        .long   1
b:
        .long   3
c:
        .long   3
d:
        .long   1

您链接的GOTW更关注有关“按值传递”和最大程度减少类临时对象的不必要副本的辩论。除非您过早地进行优化,否则几乎没有理由关心字面量类型(无论是否创建临时对象)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中,产生类类型临时变量的表达式可以属于哪些类别(左值,右值,右值等)?

来自分类Dev

C ++使用临时对象右值初始化左值引用以及自动推导

来自分类Dev

C ++中的右值引用可延长临时对象的寿命

来自分类Dev

C ++中的右值引用可延长临时对象的寿命

来自分类Dev

在C ++ 03中是否可以使用非常量右值引用?

来自分类Dev

更多右值引用和临时对象

来自分类Dev

为什么通过右值初始化非常量引用有效(在C ++ 11中)?

来自分类Dev

为什么通过右值初始化非常量引用有效(在C ++ 11中)?

来自分类Dev

右值类型的非常量引用

来自分类Dev

右值类型的非常量引用

来自分类Dev

右值类型的非常量引用

来自分类Dev

是否有可能有枚举值作为Java的私有静态最后常量?

来自分类Dev

交换没有临时变量的哈希值

来自分类Dev

C ++右值引用请求

来自分类Dev

右值引用与常量左值引用的C ++模板参数推导

来自分类Dev

C ++:右值引用转换为非常量左值引用

来自分类Dev

通过引用,常量引用,右值引用还是常量右值引用传递?

来自分类Dev

使用带有右值range-init的C ++ 11基于范围的for循环是否安全?

来自分类Dev

为什么右值/常量引用具有内存地址和大小?

来自分类Dev

从Visual C ++ 2015中的右值无效初始化非常量引用

来自分类Dev

从Visual C ++ 2015中的右值无效初始化非常量引用

来自分类Dev

从右值无效初始化非常量引用

来自分类Dev

从右值无效初始化非常量引用

来自分类Dev

没有std :: move的右值引用

来自分类Dev

没有调用右值构造函数?

来自分类Dev

Rust是否按值优化传递的临时结构?

来自分类Dev

理解右值引用的C ++语法

来自分类Dev

C ++,函数参数中的右值引用

来自分类Dev

理解右值引用的C ++语法

Related 相关文章

  1. 1

    在C ++中,产生类类型临时变量的表达式可以属于哪些类别(左值,右值,右值等)?

  2. 2

    C ++使用临时对象右值初始化左值引用以及自动推导

  3. 3

    C ++中的右值引用可延长临时对象的寿命

  4. 4

    C ++中的右值引用可延长临时对象的寿命

  5. 5

    在C ++ 03中是否可以使用非常量右值引用?

  6. 6

    更多右值引用和临时对象

  7. 7

    为什么通过右值初始化非常量引用有效(在C ++ 11中)?

  8. 8

    为什么通过右值初始化非常量引用有效(在C ++ 11中)?

  9. 9

    右值类型的非常量引用

  10. 10

    右值类型的非常量引用

  11. 11

    右值类型的非常量引用

  12. 12

    是否有可能有枚举值作为Java的私有静态最后常量?

  13. 13

    交换没有临时变量的哈希值

  14. 14

    C ++右值引用请求

  15. 15

    右值引用与常量左值引用的C ++模板参数推导

  16. 16

    C ++:右值引用转换为非常量左值引用

  17. 17

    通过引用,常量引用,右值引用还是常量右值引用传递?

  18. 18

    使用带有右值range-init的C ++ 11基于范围的for循环是否安全?

  19. 19

    为什么右值/常量引用具有内存地址和大小?

  20. 20

    从Visual C ++ 2015中的右值无效初始化非常量引用

  21. 21

    从Visual C ++ 2015中的右值无效初始化非常量引用

  22. 22

    从右值无效初始化非常量引用

  23. 23

    从右值无效初始化非常量引用

  24. 24

    没有std :: move的右值引用

  25. 25

    没有调用右值构造函数?

  26. 26

    Rust是否按值优化传递的临时结构?

  27. 27

    理解右值引用的C ++语法

  28. 28

    C ++,函数参数中的右值引用

  29. 29

    理解右值引用的C ++语法

热门标签

归档