[英]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.