В documentation, я вижу, что std::vector<bool>
оптимизирован для обеспечения пространства-эффективности, делая каждый булев занимать один бит. Из документации:std :: vector <bool> оптимизация реализации
Способ, которым std :: vector является эффективным в пространстве (а также независимо от того, оптимизирован ли он вообще), определяется реализацией.
Означает ли это, что это зависит от реализации компилятора? Если это так, где я могу проверить, поддерживает ли мой компилятор? Почему они не хотят, чтобы это поддерживалось? Это похоже на действительно простую и эффективную реализацию.
Если нет, что это значит и что это означает, если я хочу, чтобы эта оптимизация имела место?
Я использую набор инструментов TDM GCC.
Да, это означает, что реализация 'std :: vector' в значительной степени зависит от компилятора. Он не может быть оптимизирован вообще, или он может быть оптимизирован с учетом специфики реализации. Как правило, вы узнаете об этом, обратившись к документации для своего компилятора. С GCC и другими инструментальными целями с открытым исходным кодом, я полагаю, вы также можете ознакомиться с исходным кодом. Но это не только требует больше работы, это может быть не очень хорошая идея, поскольку исходные тексты документов реализуются только для реализации, а не для контрактов. –
Простой способ проверить, предоставлена ли такая оптимизация, проверить, является ли 'std :: vector :: reference_type'' bool & 'или что-то еще. В последнем случае у вас есть прокси-тип, который должен быть разрешен только для «оптимизированной» реализации. –
@MatteoItalia 'std :: vector :: reference' требуется, чтобы быть прокси-сервером, даже если реализация фактически не упаковывает биты. –