C++数组衰减不会发生以供参考,为什么?

C++ array decay don't happen for reference why?

本文关键字:参考 为什么 衰减 数组 C++      更新时间:2023-10-16

我正在阅读有关c++的内容,发现当我们通过引用传递数组时,数组到普通非const指针的转换(技术上称为衰减)不会发生。这个限制有什么原因吗?

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

当它是&取地址运算符。

当它是sizeof操作符的实参时

当它是char [N + 1]类型的字符串字面值或wchar_t [N + 1]类型的宽字符串字面值(N是字符串的长度)用于初始化数组时,如char str[] = "foo";or wchar_t wstr[] = L"foo";

此外,在C11中,新引入的alignof操作符也不允许其数组实参衰变成指针。

在c++中,有额外的规则,例如,当它通过引用传递时。

谢谢

数组到指针的衰减产生右值。因此,很明显,它只在右值上下文中有意义。

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

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