在sizeof(+;+;n)表达式处不调用增量运算符 < C或C++中,增量和递减运算符( ++N+/COD>, -N/COD>)在< siZeFor()/运算符中不执行。 int n = 100; int size_int = sizeof(++n); std::cout<<n; int n=100; int size_int=sizeof(++n); St::Cuth C++,除了C99中提到的C99的表达式外,没有对代码中的表达式进行评价,因为这是对C的的早期标记。

在sizeof(+;+;n)表达式处不调用增量运算符 < C或C++中,增量和递减运算符( ++N+/COD>, -N/COD>)在< siZeFor()/运算符中不执行。 int n = 100; int size_int = sizeof(++n); std::cout<<n; int n=100; int size_int=sizeof(++n); St::Cuth C++,除了C99中提到的C99的表达式外,没有对代码中的表达式进行评价,因为这是对C的的早期标记。,c++,c,increment,sizeof,C++,C,Increment,Sizeof,sizeof运算符在编译时计算 然后,sizeof只使用表达式的类型(在编译时计算) 从§5.3.3尺寸 sizeof运算符生成对象中的字节数 其操作数的表示形式。操作数可以是表达式, 哪一个是未赋值的操作数(第5条)或带括号的操作数 类型id P>一些C++编译器提供VLAS作为扩展。在 < P> C中,除可变长度数组:< /P>之外,不计算操作码的操作数。 6.5.3.4。p2: sizeof运算符生成其操作数的大小(以字节为单位),该操作数可以是 表达式或类型的括号名称。大小由类型决定

sizeof
运算符在编译时计算

然后,
sizeof
只使用表达式的类型(在编译时计算)

§5.3.3尺寸

sizeof运算符生成对象中的字节数 其操作数的表示形式。操作数可以是表达式, 哪一个是未赋值的操作数(第5条)或带括号的操作数 类型id


<> P>一些C++编译器提供VLAS作为扩展。在

< P> C中,除可变长度数组:< /P>之外,不计算<代码>操作码的操作数。 6.5.3.4。p2:

sizeof运算符生成其操作数的大小(以字节为单位),该操作数可以是 表达式或类型的括号名称。大小由类型决定 操作数。结果是一个整数。如果操作数的类型是可变长度数组 类型,则计算操作数;否则,不计算操作数,结果为 整型常数

如果将
n++
放入可变长度数组,例如:

int n = 1 ; 
sizeof( int(*)[n++] ) ;
如果对操作数求值,则未指定

6.7.6.2。p5

如果大小不是整数常量表达式:如果它出现在 函数原型范围内的声明,将其视为替换为*;否则,, 每次评估时,其值应大于零。每个实例的大小 可变长度数组类型的属性在其生存期内不会更改。哪里有尺码 表达式是sizeof运算符的操作数的一部分,用于更改 大小表达式不会影响运算符的结果,是否影响,尚不明确 计算大小表达式


C++中<代码> 代码>不评估其操作数。< /P> <> C++引用标准,部分代码< >代码[Exp] 5/7,<代码> > C++ 11或<代码> [ExpR] 5/8 < /C> > C++ 14:< /P> 在某些上下文中,会出现未计算的操作数(

5.2.8
5.3.3
5.3.7
7.1.6.2
)。不计算未计算的操作数

这里的
5.3.3
指的是
sizeof
(还有
typeid
noexcept
decltype

C++98标准没有这一段,但无论如何,在其部分
5.3.3 Sizeof
中,它与较新的标准基本相同:

sizeof
运算符生成其操作数的对象表示形式中的字节数。操作数可以是未计算的表达式,也可以是带括号的type-id


如果您检查以下各项的分解:

int size_int = sizeof(++n);
然后您将看到类似的内容(取决于您的编译器):


sizeof(…)
表达式在编译时求值,并替换为常量值


在上面的示例中,
sizeof(…)
表达式替换为的常量值为4。

sizeof在编译时计算,这可以解释为什么编译器可能会出错,但我希望您发布的代码也会写101
sizeof
不计算其参数(除非它是一个C可变长度数组)。偶数
sizeof(*(int*)3)有效(相当于代码> sieof(int)< /> >)。@ ReMaabeli只指“刚刚开始”的评论,其余的是OP。我知道你不是在开玩笑,或者抱怨人们这样做:)我编辑的问题只涉及C++。代码示例是C++。已经有一个问题需要C@haccks投票重新开放。建议的副本仅适用于C;和C在这方面不同于C++。@ MattMcNabb,这就是你所说的VLA吗?同样,<代码>()<代码>不是操作员名字的一部分。跟我重复一遍,现在大家都很大声:
sizeof
不是函数@放松:我意识到这曾经是一个“C/C++”问题;“你现在可以删除你的否决票了。”弗雷斯内尔早些时候用C标记了这个问题too@Ryan嗯,它是怎么做到的?大小是对象类型的一个属性。如果大小表达式是
sizeof
运算符的操作数的一部分,则可以添加6.7.6.2 p5(n1570),并且更改大小表达式的值不会影响运算符的结果,但大小表达式是否求值尚未确定。因此,例如in
int n=1;sizeof(int(*)[n++])
如果对
n++
进行评估,则未指定。建议将此答案(包括mafso的评论)移至说明标准的版本nice@MattMcNabb好的,我做到了。
mov dword ptr [size_int],4