C++数组作为函数参数

标签 c++

using Data = char[10];
void f(Data x)
{
    x = nullptr; // this compiles
}
void g(Data &x)
{
    x = nullptr; // this does not compile, msvc complain "expression must be a modifiable lvalue
}

我很困惑为什么赋值表达式在 f 中编译,但在 g 中不编译。我预计这两个赋值都会失败,因为数组类型不可修改。

任何对 c++ 标准的引用都将不胜感激。

最佳答案

这与函数参数类型调整([dcl.fct]/5)有关:

After determining the type of each parameter, any parameter of type “array of T” or of function type T is adjusted to be “pointer to T”.

由于类型别名等同于它命名的类型,在第一种情况下,类型被确定为 char[10] 并调整为 char*。您可以修改指针。

在第二种情况下,您形成了一个 char(&)[10]。它是对数组的引用,数组无法赋值,即使是通过引用也是如此。

关于C++数组作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47386833/

相关文章:

c++ - WindowProc 中的异常

c++ - 在 Airplay SDK 中,Iw2DCreateImage 在大于 360x360 像素的 png 上返回堆 0 内存不足问题

c++ - 如何创建不破坏严格别名的 uint8_t 数组?

c++ - 回归基础——将字符串复制到静态数组的惯用方法

c++ - QML 中的附加属性

c++ - 在 Google Native-Client 中调整音量

C++ 指针和队列

c++ - 为什么 std::vector::reserve 调用复制构造函数?

c++ - 无法转换 boost::lambda::placeholder1_type

c++ - 专用于 "direct"函数类型(与函数指针类型相反)