【发布时间】:2015-10-22 18:15:16
【问题描述】:
我正在阅读有关 C++ 的内容,发现当我们通过引用传递数组时,不会发生数组到普通非 const 指针的转换(技术上称为衰减)。这个限制有什么原因吗?
我知道在 C99 中发生数组衰减的三种基本情况,即:
当它是 & (address-of) 运算符的参数时。
当它是 sizeof 运算符的参数时。
当它是 char [N + 1] 类型的字符串文字或 wchar_t [N + 1] 类型的宽字符串文字(N 是字符串的长度)时,用于初始化数组,如 char str [] = "富";或 wchar_t wstr[] = L"foo";.
此外,在 C11 中,新引入的 alignof 运算符也不会让它的数组参数衰减为指针。
在 C++ 中,还有其他规则,例如,当它通过引用传递时。
谢谢
【问题讨论】:
-
你希望它衰减到什么程度?
-
首先你必须解释你在说什么限制。
-
@anonymous 你遇到了什么错误?
-
另外,数组在传递给
sizeof运算符时不会衰减。 -
更好的问题可能是为什么数组如此损坏以至于
int x[4]不可复制,但struct { int x[4]; }是...