以下の例を考える。
#include <iostream> struct V { V & operator = ( V const & ) { std::cout << "V" << '\n' ; return *this ; } } ; struct A : virtual V { } ; struct B : virtual V { } ; struct C : A, B { } ; int main() { C c1 ; C c2 ; c1 = c2 ; // #1 }
#1で、V::operator =が何度呼び出されるかは、未規定である。
より正確に書くと、規格準拠の実装は、上記のコードで、V::operator =を一回呼び出してもいいし、二回呼び出してもいい。
GCCとClangは、二回呼び出すようだ。
No comments:
Post a Comment