Anj*_*aka 0 c++ const reference qualifiers
我有一个问题,为什么某个东西“一步一步”完成后为什么不能编译,而为什么“一步一步”完成却不能编译。我有三节课;
class Time {
int mTime;
int Time::getTimeAsUnix() const {return mTime;}
}
class Travel {
Time mTimestamp;
const Time& Travel::getTime() const { return mTimestamp; }
Time& Travel::getTime() { return mTimestamp; }
}
class Analysis : public Travel {
int Analysis::getUnixTime() const {
// Time& t = Travel::getTime();
// return t.getTimeAsUnix(); // This does NOT compile
return Travel::getTime().getTimeAsUnix(); // This compiles
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么在Analysis类中编译非注释方法,而注释方法却给我一个即时的“ C ++错误:尝试时将'const Time'绑定到类型'Time&'的引用时会丢弃限定符”吗?
两者执行时不是完全一样吗?
线
Time& t = Travel::getTime();
Run Code Online (Sandbox Code Playgroud)
需要是
const Time& t = Travel::getTime();
Run Code Online (Sandbox Code Playgroud)
为它工作。之所以需要这样做,是因为您在const限定的函数内。当您使用const限定的函数时,该类的所有成员都被视为const。也就是说,当您致电时getTime,
const Time& Travel::getTime() const { return mTimestamp; }
Run Code Online (Sandbox Code Playgroud)
该功能的版本。尝试将a分配const Time&给Time&无效的工作,因为您将剥离返回类型的常量。