【发布时间】:2011-09-13 23:11:47
【问题描述】:
在 C++ IS 的 C.1.3 中(2003。它也在 C++11 IS 中),该标准指出了 ISO C 和 C++ 之间的区别;即,对于
char arr[100];
sizeof(0, arr) 在 C 中返回 sizeof(char*),但在 C++ 中返回 100。
我找不到sizeof 采用两个参数的文档。明显的后备是逗号运算符,但我不这么认为:C 中的sizeof(arr) 是100; sizeof(0, arr) 是 sizeof(char*)。 sizeof(0, arr) 和 sizeof(arr) 在 C++ 中都是 100。
在这种情况下,我可能错过了 IS 的全部要点。任何人都可以帮忙吗?这类似于 09 年讨论的一个问题,但没有人提到 IS,而且我认为没有给出正确的答案。
编辑:实际上,IS 是在谈论逗号运算符。因此,出于某种原因,(0, arr) 在 C 中返回 char*,但在 C++ 中返回 char[100]。为什么?
【问题讨论】:
-
其实IS是在说逗号操作符,但是我还是不明白是怎么回事。
-
有趣。我从未见过
sizeof有 2 个参数。它被定义为可选使用()的一元运算符,这可以排除多个参数。 -
@PeterRowell:没错。这里传递给
sizeof的表达式使用了逗号运算符。即sizeof x,其中x是表达式(0, arr)。 -
我采用了与现有答案有所不同的方法,我认为这可能更有趣。
标签: c++ c arrays pointers comma-operator