鑑於反直觀的行爲虛函數
#include <string>
#include <iostream>
struct A {
virtual operator std::string() const { return "A"; }
virtual operator const char *() const { return this->operator std::string().c_str(); }
};
struct B1 : public A {
virtual operator std::string() const { return "<"; }
};
struct B2 {
B2() { }
virtual ~B2() { }
virtual operator std::string() const { return ">"; }
virtual operator const char *() const { return this->operator std::string().c_str(); }
};
struct C1 : public A {
C1() { }
virtual ~C1() { }
virtual operator std::string() const { return "["; }
};
struct C2 {
C2() { }
virtual ~C2() { }
virtual operator std::string() const { return "]"; }
virtual operator const char *() const { return this->operator std::string().c_str(); }
};
int main() {
using namespace std;
cout << B1() << endl;
cout << C1();
cout << C2() << B2() << endl;
}
輸出應爲 「< []>」。但是,它是「< []]」。
- 我錯了嗎?如果是這樣,爲什麼?
- 如果不是,那麼這種行爲的潛在原因是什麼?
不要以爲我見過虛擬應用於操作符之前。我很好奇你將如何調用它。 – 2011-12-16 15:01:32