在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在编译时计算,这可以解释为什么编译器可能会出错,但我希望您发布的代码也会写101sizeof
不计算其参数(除非它是一个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),并且更改大小表达式的值不会影响运算符的结果,但大小表达式是否求值尚未确定。因此,例如inint n=1;sizeof(int(*)[n++])
如果对n++
进行评估,则未指定。建议将此答案(包括mafso的评论)移至说明标准的版本nice@MattMcNabb好的,我做到了。
mov dword ptr [size_int],4