繁体   English   中英

C ++数组作为函数参数

[英]C++ array as function parameter

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 )有关:

在确定每个参数的类型之后,将类型为“ T的数组”或功能类型为T的任何参数调整为“指向T的指针”。

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

在第二种情况下,您形成一个char(&)[10] 它是对数组的引用,即使通过引用也无法将数组分配给该数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM