【发布时间】:2012-12-27 05:57:34
【问题描述】:
我对 C++ 的这种行为感到困惑:
struct A {
virtual void print() const { printf("a\n"); }
};
struct B : public A {
virtual void print() const { printf("b\n"); }
};
struct C {
operator B() { return B(); }
};
void print(const A& a) {
a.print();
}
int main() {
C c;
print(c);
}
那么,测验是,程序的输出是什么 - a 还是 b?嗯,答案是一个。但为什么呢?
【问题讨论】:
-
它在我的机器上打印
b。另外,void main()?酒吧。 -
main返回int,伙计 -
@Carl:什么编译器?参见例如ideone.com/4W7qIa(即 GCC 4.3.4)。 GCC 4.5.1 也像 VS2010 一样打印“a”。
-
@Code-Guru:那是不是
operator(),而是到B的转换运算符。注意区别:B operator();与operator B()。 -
通过 copy-initialization 进行切片,生成
"a",如果省略则生成"b"。这被 [5.8.3]/5 所涵盖,但我无法弄清楚...
标签: c++ casting polymorphism overloading operator-keyword