このコードで:
#include <iostream>
#include <list>
int main() {
std::cout << sizeof(std::list<void*>) << std::endl;
};
std::list<void*>
GCC 4.7では、C ++ 98でのサイズは16バイトであり、C++11でのサイズは24バイトであることに気づきました。
std :: listで何が変わったのか、それが大きくなったのだろうかと思っていました。
C ++ 11はlist::size()
、一定時間で実行する必要があります。GCCは、データメンバーとしてサイズを追加することでこれを可能にしました。GCCは、C ++ 98モードではそうしませんでした。これは、バイナリ互換性が損なわれるためです。
C++98モードでコンパイルされたコードとC++11モードでコンパイルされたコードを混在させないでください。動作しません。
更新:どうやら、GCCの人々は心変わりし、C ++ 11の適合性は今のところ互換性を維持することほど重要ではlist::size()
ないため、GCC4.7.2では一定時間実行されなくなります。将来のバージョンでは、C++98モードとC++11モードの両方で使用される予定です。