将文字常量/基本类型分配给变量时,是否会在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/。
另外,我认为我在所有这些方面都是完全错误的
如果我们要具体一点,我们必须区分临时对象和临时值。临时对象属于类类型。这就是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] 删除。
我来说两句