表达式如何存储在堆栈中?

时间:2011-03-25 09:46:09

标签: c++

如何将表达式2*4+6-3/2存储在堆栈中?

6 个答案:

答案 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)

我不知道你的意思是否正确,但是:当使用堆栈计算表达式时,有一个非常有用的符号,它的反向波兰表示法。

以下是更多信息和实施的链接:

http://en.wikipedia.org/wiki/Reverse_Polish_notation

答案 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”。数学表达式将不会被保留。