C++ 如何';在C+中实现了一个临时+;?

C++ 如何';在C+中实现了一个临时+;?,c++,temporary,C++,Temporary,在下面的“a”是临时的 cout << 'a'; cout它可能是其中一条指令的操作数。它可能是其中一条指令的操作数。除非你有一个非常糟糕的编译器或机器架构,'a'不会作为数据存储在任何地方。它是asm中的立即数操作数,例如 mov $0x97, %eax 除非你有一个非常糟糕的编译器或机器架构,'a'不会作为数据存储在任何地方。它是asm中的立即数操作数,例如 mov $0x97, %eax 通常与代码内联;大多数现代CPU都有一条“立即移动”(学究式的PC相关)指令,尽管一

在下面的
“a”
是临时的

cout << 'a';

cout它可能是其中一条指令的操作数。

它可能是其中一条指令的操作数。

除非你有一个非常糟糕的编译器或机器架构,
'a'
不会作为数据存储在任何地方。它是asm中的立即数操作数,例如

mov $0x97, %eax

除非你有一个非常糟糕的编译器或机器架构,
'a'
不会作为数据存储在任何地方。它是asm中的立即数操作数,例如

mov $0x97, %eax

通常与代码内联;大多数现代CPU都有一条“立即移动”(学究式的PC相关)指令,尽管一些较老的CPU只能从指定的内存地址移动(这就是为什么Fortran是用这种假设编写的,导致常量必须实际分配给内存)。

通常与代码内联;大多数现代CPU都有“立即移动”(学究式的PC相关)指令,尽管一些较旧的CPU只能从指定的内存地址移动(这就是为什么Fortran采用这种假设编写,导致常量必须实际分配给内存)。

请看以下问题:

查看以下问题:


存储位置取决于编译器和体系结构<代码>'a'
通常是一个8位的量,值为97。根据特定体系结构的调用约定,它要么被推送到堆栈上,要么被移动到过程
操作符之前的寄存器中,存储位置取决于编译器和体系结构<代码>'a'
通常是一个8位的量,值为97。根据特定体系结构的调用约定,它将被推送到堆栈上,或者在过程
运算符之前移动到寄存器中,但
'a'
是字符文字,而不是临时字符。Real-temporaries将在堆栈上。@quantummechanical,所以
'a'
在数据部分?但是
'a'
是字符文本,而不是临时的。实时性将在堆栈上。@quantummechanical,所以
'a'
在数据部分?@R…,如果
cout哦,我看到
b*c
是临时的,其中
b
c
是变量。它不是临时的。它是一个字符串文本。它将被分配一个固定地址(通常在“文本”(代码)或只读数据段中),字符串的绝对或相对地址将在asm中发出以访问它。@cpuer:我不确定是否定义了术语“临时”或在何处定义,但我怀疑它只适用于
类型的对象,其中实际对象经历了构造和破坏。@R..,这个术语来自于这个答案:@R..,如果
可以怎么办?哦,我看到
b*c
是临时的,其中
b
c
是变量。它不是临时的。它是一个字符串文本。它将被分配一个固定地址(通常在“文本”(代码)或只读数据段中),字符串的绝对或相对地址将在asm中发出以访问它。@cpuer:我不确定是否定义了术语“临时”或在何处定义,但我怀疑它只适用于
类型的对象,其中实际对象经历了构造和破坏。@R..,这个术语来自以下答案:
    addiu $a0, $zero, 0x61
    addiu $a1, $zero, ...  # address of cout
    jal   ...              # address of operator<<(ostream&, char)