gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:52 26 4
gpt4 key购买 nike

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/

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