虚函数中的默认变量

时间:2015-05-24 14:07:44

标签: c++

我确信在StackOverflow上已经有了这个问题的正确答案,但我找不到它。

我在一些c ++测试中遇到了这个例子,对我来说这是一个意想不到的行为。

class A {
public:
    virtual int foo(int n = 3) {
        return n << 2;
    }
};

class B : public A {
public:
    int foo(int n = 4) {
        return n << 3;
    }
};

void main() {
    B b;
    A *a = &b;
    std::cout << a->foo() << std::endl;
}

我一直都知道在 B 类中会覆盖 f ,但 的默认值来自基础 foo 确实出乎意料。

我们将通过将指针替换为B并使用引用替换为B来获得相同的输出(24)。

我的问题是

  • 为什么 n 使用 3 而不是 4 进行初始化?
  • 是否有人可以针对该行为提供一些解释(如果可能,还有一些规范引用)?

0 个答案:

没有答案