如何将表达式2*4+6-3/2
存储在堆栈中?
答案 0 :(得分:4)
您的C ++编译器将存储:13
。
然后将根据用途确定存储的格式。将其分配给float
会使编译器存储的内容与分配给int
时不同。我不怀疑编译器将((float) 2*4+6-3/2)
更改为13.0f
。
答案 1 :(得分:3)
除非您将其存储在变量中,即int a = 2*4+6-3/2
局部变量占用堆栈上的空间,由编译器负责。基本上,在进入函数时,新的堆栈帧从堆栈存储器中被切断。在这个“框架”中,存储了局部变量(以及其他信息)。
答案 2 :(得分:3)
我不知道你的意思是否正确,但是:当使用堆栈计算表达式时,有一个非常有用的符号,它的反向波兰表示法。
以下是更多信息和实施的链接:
答案 3 :(得分:1)
表达式不会存储在堆栈中。编译器会将其结果放在.const段中。
当你进入一个功能并且有
时float foo = 2*4+6-3/2; // floating point
int foo = 2*4+6-3/2; // int
将.const部分中的var分配(或转换,如果需要)到堆栈上的变量。
答案 4 :(得分:0)
表达式不会存储在任何地方,但结果将是。它的存储方式取决于您的使用方式:
float foo = 2*4+6-3/2; // store result as floating point
int foo = 2*4+6-3/2; // store result as int
答案 5 :(得分:0)
2*4+6-3/2
在标准C ++中存储在“堆栈”中的唯一方法是:
#include <stack>
int main()
{
std::stack<int> s;
s.push(2*4+6-3/2);
}
值13存储在堆栈中。
现在,如果我怀疑你实际上并不是指堆栈而是静态分配对象(不要忘记,C ++并不关心它们的物理位置),那么你应该考虑“2 * 4 + 6-3 / 2”是一个右值(在这种情况下是临时)。只有在分配给变量时才会进行存储。然后,将对文字进行评估以生成单个值“13”。数学表达式将不会被保留。