为什么我的 BaseClass:Method 代码编译(带有单冒号)?

Why does my BaseClass:Method code compile (with single colon)?

本文关键字:单冒号 编译 BaseClass 我的 Method 代码 为什么      更新时间:2023-10-16

我遇到了以下代码,该代码吐出了一个分段错误。然后我意识到我输入了 Base:hello(( 而不是 Base::hello,但令我惊讶的是,单冒号代码会编译。Base:hello(( 如何成为有效的表达式?

class Base {
public:
virtual void hello() {
cout << "Hello" << endl;
}
};
class Derived : public Base {
public:
void hello() override {
Base:hello();  // why does this compile?
}
};

Base:被解析为标签,可以用作goto语句的目标。因此,这相当于只是调用hello(),当然,这将为您提供无限递归和堆栈溢出。