C ++数组衰减不是为了参考原因而发生的?

时间:2015-10-22 18:15:16

标签: c++ c++11

我正在阅读有关C ++的内容,并发现当我们通过引用传递数组时,数组到正常的非常量指针转换(技术上称为衰减)不会发生。这种限制背后有什么理由吗?

我知道在C99中有三种基本情况发生阵列衰减,即:

当&和& (地址)运营商。

当它是sizeof运算符的参数时。

当它是char [N + 1]类型的字符串文字或类型为wchar_t [N + 1]的宽字符串文字(N是字符串的长度)时,它用于初始化数组,如在char str [] =" foo&#34 ;;或者wchar_t wstr [] = L" foo&#34 ;;。

此外,在C11中,新引入的alignof运算符也不允许其数组参数衰减为指针。

在C ++中,还有其他规则,例如,当它通过引用传递时。

由于

2 个答案:

答案 0 :(得分:1)

数组到指针衰减产生右值。所以,出于显而易见的原因,它只在rvalue上下文中有意义。

参考上下文自然是左值上下文,这就是为什么在这种上下文中,数组到指针的衰减没有任何意义。

答案 1 :(得分:0)

简单的答案是类型安全,这是C ++的一个主要支柱。在某些情况下,衰减的唯一原因是C兼容性。