为什么在这两种情况下“ const”的行为不同?

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&'的引用时会丢弃限定符”吗?

两者执行时不是完全一样吗?

Nat*_*ica 5

线

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&无效的工作,因为您将剥离返回类型的常量。