28

このコードで:

#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で何が変わったのか、それが大きくなったのだろうかと思っていました。

4

1 に答える 1

43

C ++ 11はlist::size()、一定時間で実行する必要があります。GCCは、データメンバーとしてサイズを追加することでこれを可能にしました。GCCは、C ++ 98モードではそうしませんでした。これは、バイナリ互換性が損なわれるためです。

C++98モードでコンパイルされたコードとC++11モードでコンパイルされたコードを混在させないでください。動作しません。

更新:どうやら、GCCの人々は心変わりし、C ++ 11の適合性は今のところ互換性を維持することほど重要ではlist::size()ないため、GCC4.7.2では一定時間実行されなくなります。将来のバージョンでは、C++98モードとC++11モードの両方で使用される予定です。

于 2012-04-08T18:06:45.017 に答える