const函数不返回char *

时间:2015-07-01 18:41:46

标签: function const

任何人都可以解释一下为什么如果我将函数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;
}

1 个答案:

答案 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在程序中存储字符串。