タグ付けされた質問 「libc++」

6
不完全な型のstd :: unique_ptrはコンパイルされません
私はpimpl-idiomをstd::unique_ptr次のように使用しています: class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile }; ただし、次の行304で、不完全な型の使用に関するコンパイルエラーが発生します<memory>。 ' sizeof'の不完全な型 ' uixx::window::window_impl' への無効な適用 私の知る限りstd::unique_ptrでは、不完全な型で使用できるはずです。これはlibc ++のバグですか、ここで何か問題がありますか?

2
libc ++での短い文字列最適化のメカニズムは何ですか?
この回答は、短い文字列の最適化(SSO)の概要を示しています。ただし、実際に、特にlibc ++実装でどのように機能するかを詳しく知りたいのですが。 SSOの対象となるには、文字列はどのくらい短い必要がありますか?これはターゲットアーキテクチャに依存しますか? 文字列データにアクセスするとき、実装はどのように短い文字列と長い文字列を区別しますか?それは同じくらい簡単m_size <= 16ですか、それとも他のメンバー変数の一部であるフラグですか?(私はそれm_sizeまたはその一部が文字列データを格納するために使用されることもあると思います) 私がこの質問をlibc ++に対して特別に尋ねたのは、それがSSOを使用していることがわかっているためです。これは、libc ++ホームページにも記載されています。 ソースを確認した後の観察結果を次に示します。 libc ++は、文字列クラスの2つのわずかに異なるメモリレイアウトでコンパイルできます_LIBCPP_ALTERNATE_STRING_LAYOUT。これはフラグによって制御されます。どちらのレイアウトでも、リトルエンディアンマシンとビッグエンディアンマシンが区別され、合計4つの異なるバリアントが存在します。以下の説明では、「通常の」レイアウトとリトルエンディアンを想定します。 さらにそれsize_typeが4バイトでvalue_type1バイトであると仮定すると、これは文字列の最初の4バイトがメモリ内でどのように見えるかです。 // short string: (s)ize and 3 bytes of char (d)ata sssssss0;dddddddd;dddddddd;dddddddd ^- is_long = 0 // long string: (c)apacity ccccccc1;cccccccc;cccccccc;cccccccc ^- is_long = 1 短い文字列のサイズは上位7ビットであるため、アクセスするときにシフトする必要があります。 size_type __get_short_size() const { return __r_.first().__s.__size_ >> 1; } 同様に、長い文字列の容量のゲッターとセッターは__long_mask、is_longビットを回避するために使用します。 私はまだ私の最初の質問に対する答えを探しています。つまり__min_cap、異なる文字列に対して、どのような値、短い文字列の容量がとるのでしょうか? その他の標準ライブラリの実装 …

1
libc ++のvector <bool> :: const_referenceがboolではないのはなぜですか?
セクション23.3.7クラスvector&lt;bool&gt;[vector.bool]、パラグラフ1は次のように述べています。 template &lt;class Allocator&gt; class vector&lt;bool, Allocator&gt; { public: // types: typedef bool const_reference; ... ただし、libc ++を使用すると、このプログラムはコンパイルに失敗します。 #include &lt;vector&gt; #include &lt;type_traits&gt; int main() { static_assert(std::is_same&lt;std::vector&lt;bool&gt;::const_reference, bool&gt;{}, "?"); } さらに、C ++標準はこの仕様でC ++ 98までずっと一貫していることに注意します。また、libc ++が最初に導入されて以来、libc ++はこの仕様に一貫して準拠していないことにも注意してください。 この不適合の動機は何ですか?

2
libc ++またはlibstdc ++を使用する必要がありますか?[閉まっている]
クローズ。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前に閉鎖されました。 この質問を改善する 私はc / c ++を使用してosxとlinuxの両方のコマンドラインインターフェイス実行可能ファイルを開発しています。プロジェクトはopencvに対してリンクします。libc ++またはlibstdc ++を使用する必要がありますか?

2
std :: chrono :: yearsストレージは本当に少なくとも17ビットですか?
cppreferenceから std::chrono::years (since C++20) duration&lt;/*signed integer type of at least 17 bits*/, std::ratio&lt;31556952&gt;&gt; を使用libc++すると、16ビットに署名されているstd::chrono::yearsis の下線付きストレージが表示さshortれます。 std::chrono::years( 30797 ) // yields 32767/01/01 std::chrono::years( 30797 ) + 365d // yields -32768/01/01 apparently UB cppreferenceまたは何か他のタイプミスはありますか? 例: #include &lt;fmt/format.h&gt; #include &lt;chrono&gt; template &lt;&gt; struct fmt::formatter&lt;std::chrono::year_month_day&gt; { char presentation = 'F'; constexpr auto parse(format_parse_context&amp; ctx) …
14 c++  chrono  c++20  libc++ 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.