【发布时间】:2010-10-17 12:15:07
【问题描述】:
C++ ANSI ISO IEC 14882 2003 附录 C.1(第 668 页):
更改:条件表达式、赋值表达式或逗号表达式的结果可能是 bean 左值
理由:C++ 是一种面向对象的语言,相对更强调左值。例如,函数可能返回左值。
对原始特征的影响:改变定义明确的特征的语义。一些隐式依赖左值到右值转换的 C 表达式会产生不同的结果。例如,
char arr[100];
sizeof(0, arr)
在 C++ 中产生 100,在 C 中产生 sizeof(char*)。
...
我今天才读到这篇文章,我记得几个月前我的一个朋友提出了一个问题,即编写一个函数,如果用 C++ 编译返回 0,如果用 C 编译返回 1 .我利用在C中结构位于外部范围内这一事实解决了它。因此,考虑到这些新信息,我决定这将是上述问题的另一种解决方案,我在 Microsoft Visual Studio 2008 上尝试过,但无论是编译为 C 还是 C++ 代码sizeof(0, arr) 总是产生 4。所以 2问题:
1.什么是ISO C?它是当前的 C 标准吗?它是唯一的吗(我听说 C 正在迅速发展) 2. 这是微软 C++ 的 bug 吗?
TIA
编辑:抱歉弄混了输出并进行了编辑:
【问题讨论】:
-
在 MSVC 2010 中,
sizeof(0, arr)的计算结果似乎为4(编译为 C++ 时)。使用 g++,它的计算结果为100。
标签: c++ c visual-studio-2008 language-lawyer lvalue-to-rvalue