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

标签 c++ c visual-studio-2008 language-lawyer lvalue-to-rvalue

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

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

char arr[100];
sizeof(0, arr)

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

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

1.什么是ISO C?它是当前的C标准吗?它是唯一的吗(我听说 C 正在迅速发展) 2. 这是 Microsoft C++ 错误吗?

TIA

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

最佳答案

ISO C 是 C 标准。当前的版本是 C99,但 C1x 即将推出。如果说快速,你的意思是每十年左右就有一个新标准,那么是的,它正在迅速发展 :-)

ISO C99 第 6.5.3.4/3 节指出:

When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1.

When applied to an operand that has array type, the result is the total number of bytes in the array.

关于c++ - ISO C 中数组的左值到右值转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3953154/

相关文章:

c - typedef struct 和 extern 声明的未知类型名称错误 - C 语言

c - 如何在 Linux 中向 scsi 设备发送特定命令?

c++ - 从 C++ 应用程序请求 Windows Vista/7 上的管理员权限

c# - 查看接口(interface)的方法时是否可以看到 "final"C# 代码?

c++ - `template <class> friend class Foo` 是什么意思?

c++ - 将控制符号添加到字节流

c++ - C++ 连续内存中的模板化可变大小结构

C char * 赋值

c# - http 元刷新问题

c++ - 我怎么知道我是唯一打开文件句柄的人?