C++数组衰减不会发生以供参考,为什么?
C++ array decay don't happen for reference why?
我正在阅读有关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的兼容性。
相关文章:
- 为什么在运算符重载时需要参考?
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- 为什么make_nvp需要非常量参考?
- 为什么参考简历的格式不正确?
- 当课程成员成员时,为什么参考会占据内存
- 为什么即使传递给函数作为参考,指针也未被分配
- 为什么通用参考概念不适用于函数指针的地图插入
- 为什么编译器不给出模棱两可的参考错误
- 为什么共享_ptr需要保留foref_ptr的参考计数
- 为什么const rvalue合格的std ::可选:: value()返回const rvalue参考
- 为什么双转换到看似任何原始的常量参考
- 为什么要拿参考的地址给我一个第二等级的指针
- 为什么要使用参考而不是原始参考?
- C 11:为什么RVALUE参考参数隐式转换为LVALUE
- 为什么参考变量在声明时需要初始化
- 为什么动态演员只能与参考和指针一起使用
- 为什么未调用具有常量参考返回值的超载方法
- 为什么该函数不会获得动态数组?(我正在使用指针和参考)
- 为什么``polymorphic_allocator`取一个emore _ resource`指针''而不是参考
- C++通用参考.为什么右值引用变为右值?