fa
中对 constness 的处理是有意的,还是看起来像一个错误(编译器或标准)?我知道这是怎么发生的,但仍然感觉很奇怪(至少我希望 a = "qwe"
也被视为错误——就像在 中一样fs
).
typedef char A[8];
typedef char *P;
typedef std::string S;
void fa( const A a ) {
a = "qwe"; // ok
// *a = 'Q'; // error
}
void fp( const P p ) {
// p = "qwe"; // error
*p = 'Q'; // ok
}
void fs( const S s ) {
// s = "qwe"; // error
// *s = 'Q'; // error
}
[MinGW 4.9.1]
澄清:我了解此转换的一般工作方式,因此是“我可以看到这是如何发生的”部分。这个问题是关于 (a) std 引用(感谢那些提供它们的人),以及 (b) 这个怪癖是否有实际的理由(这是非常违反直觉的)。
最佳答案
A
的类型为 char[8]
。 const A
是 const char[8]
。 fa
的参数因此是 const char[8]
,它衰减为指针 const char*
,所以 中的一切都很好fa
,因为您正在将字符串文字(类型为 const char[SIZE]
)分配给指针 a
。
P
的类型为 char*
。 const P
的类型为 char* const
(不是 const char*
),因为 const 应用于指针。所以你不能将 p
分配给其他指针。 *p = 'Q'
可以,因为您正在分配指针指向的位置。因此,第二个函数 fb
的行为也符合预期。
关于c++ - Const 与数组到指针的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30352301/