ISO C中数组的左值到右值转换

Arm*_*yan 6 c c++ visual-studio-2008 language-lawyer lvalue-to-rvalue

C++ ANSI ISO IEC 14882 2003附录C.1(第668页):

更改:条件表达式,赋值表达式或逗号表达式的结果可能是bean左值基本
原理:C++是面向对象的语言,相对更重视左值.例如,函数可以返回左值.
对原始特征的影响:改变定义明确的特征的语义.隐式依赖左值到右值转换的某些C表达式将产生不同的结果.例如,

char arr[100];
sizeof(0, arr)
Run Code Online (Sandbox Code Playgroud)

在C + +,并产生100 sizeof(char*)中C.
...

我今天正在读这篇文章,我记得几个月后,我的一个朋友提出了一个问题,即编写一个函数,如果用C++编译将返回0,如果用C编译则返回1.我解决了它利用了这样一个事实,即在一个结构中,结构是在外部范围内.因此,考虑到这些新信息,我认为这将是上述问题的另一种解决方案,我在Microsoft Visual Studio 2008上尝试过,但无论是否编译为C或C++代码sizeof(0, arr)总是产生4.所以2个问题:

1.什么是ISO C?它是目前的C标准吗?它是唯一的一个(我听说C正在迅速发展)2.这是一个微软的C++漏洞吗?

TIA

编辑:抱歉与输出混淆并编辑它:

pax*_*blo 5

ISO C是 C标准.目前的一个是C99,但C1x就在附近.如果快速,你的意思是每十年左右一个新标准,那么是的,它正在迅速发展:-)

ISO C99第6.5.3.4/3节规定:

当应用于具有char,unsigned char或signed char(或其限定版本)类型的操作数时,结果为1.

当应用于具有数组类型的操作数时,结果是数组中的总字节数.