【发布时间】:2019-07-22 15:15:30
【问题描述】:
偶然发现以下代码:
class Person
{
private:
char name[10];
public:
// this won't compile:
char* getName_1() const {
return name;
}
// this will:
const char* getName_2() const {
return name;
}
};
我想知道编译器究竟是如何判断 getName_1() 不是 const 函数的。因为函数体内没有一段代码实际上是在修改成员变量。
【问题讨论】:
-
我不明白这个问题。
getName_1()是const函数。 -
编译器告诉或不告诉是什么意思?问题不清楚。也许您可能想访问此页面? stackoverflow.com/help/how-to-ask
-
@NathanOliver 是的,但没有任何代码尝试修改数组
name- 仅返回其地址。到目前为止,我的思路是,在每个const函数中,每个成员都被视为const成员,因此无法修改,但显然还有更多... -
在每个 const 函数中,每个成员都被视为 const 成员,因此不能修改 这就是它的要点。为什么你认为还有更多?编译器抱怨您使用
char*作为getName_1的返回类型。您不能这样做,因为在 const 函数中name是const char[],而不是char[]。 -
知道了。只是因为不允许从
const char*转换为char*。
标签: c++ compilation compiler-construction