以下の例を考える。
#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