以下の例を考える。
#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
You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.