任何人都可以解释一下为什么如果我将函数get_fName设为const函数,它只返回带有cast(char *)的_fName?没有铸造,它不会编译。 另一方面,如果我删除const,它也返回_fName而不进行强制转换?
class Student
{
int _id;
char _fName [20];
char* get_fName() const;
}
// implementation
char* Student::get_fName () const
{
return (char*)_fName;
}
答案 0 :(得分:0)
您遇到的是预期的行为。当你声明一个函数const
时,你实际上是在说“这个函数不会修改类的成员变量”。因此,这种函数的所有成员变量都显示为const
。 GCC在错误消息中强调了这一点:
x.cpp: In member function ‘char* Student::get_fName() const’:
x.cpp:11:12: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
return _fName;
^
这是因为,对const
函数,_fName
似乎是const char[20]
。除非您使用C风格的演员或char[20]
,否则不允许转换为可修改的const_cast
。当您未声明函数const
时,_fName
似乎是char[20]
,可以隐式转换为char*
,并且该函数无需强制转换即可运行。
但是,不应该这样做:如果你需要一个函数来修改对象的内部,只是不要声明它const
,因为它违反了你声明函数正在制作的合同。
另一方面,请考虑使用std::string
在程序中存储字符串。