gpt4 book ai didi

c++ - gcc 是否对 VLA 的 sizeof 运算符进行了不同的评估?

转载 作者:太空狗 更新时间:2023-10-29 23:37:15 26 4
gpt4 key购买 nike

g++ 允许将可变长度数组 (VLA) 作为扩展。 sizeof 运算符在 VLA 上的结果很有趣:

int main ()
{
char size = 20, a[10], b[size];
cout<<"sizeof(a) = "<<sizeof(a)<<endl; // sizeof(a) = 10, (can be used as template param)
cout<<"sizeof(b) = "<<sizeof(b)<<endl; // sizeof(b) = 20 !! (can't used be as template param)
}

sizeof(b) 的情况下,g++ 是否不遵循仅在编译时评估 sizeof 的标准?是 sizeof overloaded

最佳答案

VLA 是不计算 sizeof 的操作数这一规则的异常(exception),如 C99 6.5.3.4/2 中所指定:

If the type of the operand is a variable length array type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an integer constant.

此行为是 g++ 扩展;在标准 C++(直到并包括 C++14)中,sizeof 的操作数永远不会被评估(并且 VLA 是不允许的)。

关于c++ - gcc 是否对 VLA 的 sizeof 运算符进行了不同的评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8715465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com