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

このタグは、C ++ 11としてコンパイルする必要があるコードに使用します(C ++ 14以降で導入された機能は使用しません)。

4
`const auto`には何か意味がありますか?
質問は十分明確だと思います。ウィルautoキーワードのconstネスを自動検出、または常に例えばがあっても、非const型を返します。関数の2つのバージョン(1つは戻るものconst、もう1つは返さないもの)。 念のため、const auto end = some_container.end()forループの前に使用しますが、これが必要かどうか、または通常とは異なるかどうかはわかりませんauto。
82 c++  c++11  constants 

3
std :: futureのステータスを取得します
std::futureが終了したかどうかを確認することはできますか?私が知る限り、それを行う唯一の方法wait_forは、ゼロの期間で電話をかけ、ステータスがそうであるかどうかを確認することreadyですが、より良い方法はありますか?

3
符号付き整数オーバーフローはC ++でも未定義の動作ですか?
ご存知のように、符号付き整数オーバーフローは未定義の動作です。しかし、C ++ 11のcstdintドキュメントには興味深いものがあります。 幅がそれぞれ正確に8、16、32、64ビットで、パディングビットがなく、負の値に2の補数を使用する符号付き整数型(実装が型を直接サポートしている場合にのみ提供) リンクを見る そして、ここに私の質問があります:標準では、、、および負の数は2の補数であると明示的に述べられているint8_tのでint16_t、これらのタイプのオーバーフローは未定義の動作ですか?int32_tint64_t 編集私はC ++ 11とC11標準をチェックしました、そしてここに私が見つけたものがあります: C ++ 11、§18.4.1: ヘッダーは、C標準の7.20と同じように、すべての関数、タイプ、およびマクロを定義します。 C11、§7.20.1.1: typedef名はintN_t、幅N、パディングビットなし、2の補数表現の符号付き整数型を指定します。したがって、int8_tは、正確に8ビットの幅を持つそのような符号付き整数型を示します。

4
C ++ 11はvector <const T>を許可しますか?
コンテナの要件がC ++ 03からC ++ 11に変更されました。C ++ 03には包括的な要件(コピーの構成可能性やベクターの割り当て可能性など)がありましたが、C ++ 11では各コンテナー操作に関するきめ細かい要件が定義されています(セクション23.2)。 その結果、割り当てを必要としない特定の操作(構築およびpush_backそのような操作)のみを実行する限り、たとえば、コピー構築可能であるが割り当て不可能な型(constメンバーを持つ構造体など)をベクトルに格納できます。;でinsertはありません)。 私が疑問に思っているのは、これは標準が現在許可していることを意味するのvector&lt;const T&gt;でしょうか?const Tconstメンバーを持つ構造体のように、コピー構築可能であるが割り当て可能ではないタイプである必要がある理由はわかりませんが、何かを見逃している可能性があります。 (私が何かを見逃したかもしれないと思う理由の一部は、インスタンス化しようとするとgccトランクがクラッシュして燃えることですvector&lt;const T&gt;がvector&lt;T&gt;、Tにconstメンバーがある場合は問題ありません)。
82 c++  vector  c++11  constants 

4
メモリアライメント:alignof / alignasの使い方は?
現在、共有メモリを使用しています。 わからないalignofとalignas。 cppreferenceが不明確です:alignof「alignment」を返しますが、「alignment」とは何ですか?次のブロックを整列させるために追加するバイト数?パッド入りサイズ?スタックオーバーフロー/ブログエントリも不明確です。 誰かが明確に説明できますalignofとalignas?

3
非正規化浮動小数点数とは何ですか?
isnormal()リファレンスページは次のように述べています。 指定された浮動小数点数argが正規であるかどうか、つまり、ゼロ、非正規化数、無限大、またはNaNのいずれでもないかどうかを判別します。 数値がゼロ、無限、またはNaNであることは、それが何を意味するかを明確にしています。しかし、それはまた、異常と言います。数が非正規化数になるのはいつですか?

4
C ++ 0xとC ++ 11の違いは何ですか?
ここSOでは、これら2つの用語が混在して使用されています。 ウィキペディアは言う C ++ 11、以前はC ++ 0xとしても知られていました... でも理由はわかりません。 なぜ最初にC ++ 0xと呼ばれ、次にC ++ 11と呼ばれたのですか? また、xは何の略ですか?私の推測-変数のように?
82 c++  c++11 


6
BjarneはこのADLの例について間違っていますか、それともコンパイラのバグがありますか?
私はC ++プログラミング言語第4版(Bjarne Stroustrupによる)について読んでいます引数依存のルックアップ。引用は次のとおりです(26.3.6、過度に攻撃的なADL): 引数に依存するルックアップ(ADLと呼ばれることが多い)は、冗長性を回避するのに非常に役立ちます(14.2.4)。例えば: #include &lt;iostream&gt; int main() { std::cout &lt;&lt; "Hello, world" &lt;&lt; endl; // OK because of ADL } 引数に依存するルックアップendlがないと、マニピュレータは見つかりません。そのまま、コンパイラは、への最初の引数&lt;&lt;がでostream定義されていることに気付きstdます。したがって、それは探しendlでstd、それ(内を検索します&lt;iostream&gt;)。 そして、コンパイラー(C ++ 11モード)によって生成された結果は次のとおりです。 prog.cpp: In function ‘int main()’: prog.cpp:4:36: error: ‘endl’ was not declared in this scope std::cout &lt;&lt; "Hello, world" &lt;&lt; endl; ^ これはコンパイラまたは本のバグです。規格は何と言っていますか? 更新: 少し明確にする必要があります。正しい答えはを使用することstd::endlです。質問は本の中のテキストについてでした。ラクランイーストンはすでにそれだけでタイプミスではない、と述べました。段落全体が(おそらく)間違っています。その本が他の(あまり知られていない)著者によるものであれば、私はこの種の誤りを受け入れることができますが、それがビャーネによって書かれたので、私は疑っていました(そして今でもそうです)。

6
c ++ 11を使用してコードを複製する
私は現在プロジェクトに取り組んでおり、次の問題があります。 私は2つの異なる方法で働きたいC ++メソッドを持っています: void MyFunction() { foo(); bar(); foobar(); } void MyFunctionWithABonus() { foo(); bar(); doBonusStuff(); foobar(); } 実際の関数ははるかに長いので、コードを複製したくありません。問題は、MyFunctionWithABonusの代わりにMyFunctionが呼び出されたときに、いかなる状況でもプログラムに実行時間を追加してはならないということです。そのため、C ++の比較でチェックするブールパラメータだけを使用することはできません。 私の考えは、C ++テンプレートを使用してコードを仮想的に複製することでしたが、追加の実行時間がなく、コードを複製する必要がない方法を考えることはできません。 私はテンプレートの専門家ではないので、何かが足りないかもしれません。 誰かアイデアがありますか?それとも、C ++ 11ではそれは不可能ですか?
80 c++  c++11  templates 

2
C ++の空のstd :: shared_ptrとnullのstd :: shared_ptrの違いは何ですか?
cplusplus.comのshared_ptrページはの区別声をかけ、空 std::shared_ptrとヌルを shared_ptr。cppreference.comページには、明示的に両方の「空」との比較を区別を呼び出しますが、使用していないnullptrのその説明にstd::shared_ptr行動。 空とnullの間に違いはありますshared_ptrか?このような混合動作ポインタのユースケースはありますか?空でないnullshared_ptrは意味がありますか?通常の使用法(つまり、明示的に作成しなかった場合)で、空であるがnullではない結果になる可能性がある場合はありますshared_ptrか? また、C ++ 11バージョンの代わりにBoostバージョンを使用している場合、これらの回答のいずれかが変わりますか?
80 c++  c++11  shared-ptr 

7
'auto'キーワードを明示的に記述する必要があるのはなぜですか?
私はC ++ 98からC ++ 11に移行し、autoキーワードに慣れてきました。autoコンパイラが型を自動的に推測できるかどうかを明示的に宣言する必要があるのはなぜだろうと思っていました。C ++は強く型付けされた言語であり、これはルールですが、変数を明示的に宣言せずに同じ結果を達成することはできませんでしたautoか?
80 c++  c++11  auto 

10
rawメモリのビューとしてstd :: vectorを使用する
私はある時点で整数の配列とサイズへの生のポインタを与える外部ライブラリを使用しています。 ここstd::vectorで、これらの値に直接アクセスして変更するために、生のポインタでアクセスするのではなく、を使用したいと思います。 ポイントを説明する人工的な例はここにあります: size_t size = 0; int * data = get_data_from_library(size); // raw data from library {5,3,2,1,4}, size gets filled in std::vector&lt;int&gt; v = ????; // pseudo vector to be used to access the raw data std::sort(v.begin(), v.end()); // sort raw data in place for (int i = 0; …
71 c++  c++11  vector  stdvector 

5
ラムダ自体内のC ++ラムダ関数のアドレスを取得するにはどうすればよいですか?
それ自体の中でラムダ関数のアドレスを取得する方法を理解しようとしています。これがサンプルコードです: []() { std::cout &lt;&lt; "Address of this lambda function is =&gt; " &lt;&lt; ???? }(); ラムダを変数にキャプチャしてアドレスを出力できることはわかっていますが、この無名関数が実行されているときにそれを実行したいと考えています。 これを行う簡単な方法はありますか?
53 c++  c++11  lambda  c++14  c++17 

3
C ++ decltypeと括弧-なぜですか?
主題は以前に議論されました が、これは重複ではありません。 decltype(a)との違いについて質問された場合decltype((a))、通常の答えは- aは変数で(a)あり、は式です。私はこの答えに満足できないと思います。 まず、a表現もです。一次式のオプションには、特に- (式) id式 さらに重要なことに、decltypeの表現では、括弧が非常に明示的に考慮されます。 For an expression e, the type denoted by decltype(e) is defined as follows: (1.1) if e is an unparenthesized id-expression naming a structured binding, ... (1.2) otherwise, if e is an unparenthesized id-expression naming a non-type template-parameter, ... (1.3) otherwise, if e …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.