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

共同編集されたコミュニティ編集のC ++ FAQを提供します

2
「スパン」とは何ですか。いつ使用する必要がありますか。
最近span<T>、コードでを使用するよう提案するか、サイトでを使用するいくつかの回答を見ましたspan。ある種のコンテナだと思われます。しかし、私はC ++ 17標準ライブラリでそのようなものを見つけることができません。 では、この不可解なspan<T>とは何か、そしてそれが非標準である場合、なぜ(またはいつ)使用するのが良いのでしょうか?

4
いつどのようなポインターを使用しますか?
さて、私が生計を立てるためにC ++を最後に書いたのstd::auto_ptrは、すべてのstd libが利用でき、大流行していましたboost::shared_ptr。提供されている他のスマートポインターの種類のブーストを実際に調べたことはありません。C ++ 11が、ブーストで生まれた型のいくつかを提供することを理解していますが、すべてではありません。 では、誰かがどのスマートポインターをいつ使用するかを決定する簡単なアルゴリズムを持っているのでしょうか。できれば、ダムポインター(のような生のポインターT*)とブーストスマートポインターの残りの部分に関するアドバイスを含めます。(このような何かが素晴らしいでしょう)。

11
非const参照が一時オブジェクトにバインドできないのはなぜですか?
一時オブジェクトへの非const参照の取得が許可されないのはなぜgetx()ですか、どの関数が返しますか?明らかに、これはC ++標準では禁止されていますが、標準への参照ではなく、そのような制限の目的に興味があります。 struct X { X& ref() { return *this; } }; X getx() { return X();} void g(X & x) {} int f() { const X& x = getx(); // OK X& x = getx(); // error X& x = getx().ref(); // OK g(getx()); //error g(getx().ref()); //OK return 0; …



3
C ++の<=>演算子とは何ですか?
私は学ぶしようとしたが、C ++の演算子、私は上の奇妙な比較演算子につまずいcppreference.com、*このように見えたテーブルに: 「そうですね、これらがC ++の一般的な演算子であるなら、私はそれらをよりよく学ぶ」と私は考えました。しかし、この謎を解明しようとする私の試みはすべて失敗しました。ここでも、Stack Overflowでは検索がうまくいきませんでした。 &lt;=&gt;とC ++の間に関係はありますか? そして、ある場合、この演算子は正確に何をしますか? *その間、cppreference.comがそのページを更新し、&lt;=&gt;オペレーターに関する情報が含まれるようになりました。

11
C ++プログラマが知っておくべき一般的な未定義の動作は何ですか?[閉まっている]
ここで何が質問されているのかを理解するのは困難です。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 7年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 C ++プログラマが知っておくべき一般的な未定義の動作は何ですか? 次のように言います: a[i] = i++;

3
thisポインタを通じてテンプレートの基本クラスメンバーにアクセスする必要があるのはなぜですか?
以下のクラスはテンプレートでなかった場合、私は単に持っている可能性がxでderivedクラス。ただし、以下のコードでは、を使用する必要がありますthis-&gt;x。どうして? template &lt;typename T&gt; class base { protected: int x; }; template &lt;typename T&gt; class derived : public base&lt;T&gt; { public: int f() { return this-&gt;x; } }; int main() { derived&lt;int&gt; d; d.f(); return 0; }

30
C ++コンソールアプリケーションがすぐに終了しないようにする方法
最近、私はこのウェブサイトからC ++を学ぼうとしています。残念ながら、コードサンプルの1つを実行しようとすると、そのプログラムが約0.5秒間開いてからすぐに閉じます。努力の成果を確認できるように、プログラムがすぐに終了しないようにする方法はありますか?
193 c++  console  exit  terminate  c++-faq 

9
C ++ 11で廃止されたC ++イディオムはどれですか?
新しい標準では、物事を行うための新しい方法があり、多くは古い方法よりも優れていますが、古い方法はまだ問題ありません。また、下位互換性の理由から、新しい標準が公式にあまり非推奨にならないことも明らかです。したがって、残っている問題は次のとおりです。 C ++ 11スタイルよりも確実に劣るコーディングの古い方法と、代わりに今できることは何ですか? これに答えるには、「自動変数を使用する」などの明らかなことをスキップできます。
192 c++  c++11  c++-faq 



2
なぜ「これ」はポインタであり、参照ではないのですか?
私はこの質問C ++の賛否両論の回答を読んでいて、コメントを読んでいるときにこの疑問を感じました。 プログラマは、「これ」がポインタであり、参照ではないことを混乱させることがよくあります。"hello"がstd :: string型ではないが、char const *(ポインター)に評価される理由は別の混乱です(配列からポインターへの変換後)– Johannes Schaub-litb Dec 22 '08 at 22:56 これは、他の(後の)言語と同じ規則を使用していないことを示しています。– le dorfier 2008年12月22日3:35 私は「これ」のものをかなり些細な問題と呼びます。そして、おっと、私の未定義の動作の例でいくつかのエラーをキャッチしてくれてありがとう。:)私はサイズに関する情報が最初のもので何と関係があるのか​​理解していませんが。ポインターは、割り当てられたメモリの外を指すことは許可されていません。 これは絶え間ないpoinerですか?– yesraaj 2008年12月22日6:35 メソッドがconst int getFoo()constの場合、これは定数にすることができます。&lt;-getFooのスコープでは、「this」は定数なので、読み取り専用です。これにより、バグが防止され、オブジェクトが変更されないことがある程度保証されます。– Doug T. Dec 22 '08 at 16:42 「これ」を再割り当てすることはできません。つまり、これは右辺値であるため、「this =&other;」を実行できません。これはタイプT *であり、タイプT constではありません。つまり、それは非定数ポインターです。constメソッドを使用している場合は、constへのポインタです。T const。しかし、ポインタ自体は非定数です– Johannes Schaub-litb '08 / 12/22 17:53 「this」は次のように考えてください。#define this(this_ + 0)は、コンパイラが「this_」をオブジェクトへのポインタとして作成し、「this」をキーワードにします。(this_ + 0)は右辺値なので、「this」を割り当てることはできません。もちろん、それはそうではありません(そのようなマクロはありません)が、それを理解するのに役立ちます– Johannes …

2
safe-boolイディオムはC ++ 11で廃止されましたか?
@Rのこの答え。Martinho Fernandesは、セーフブールイディオムは単純にC ++ 11で置き換えられるため、C ++ 11では廃止されることを示しています。 explicit operator bool() const; 答えの標準的な見積もりによると§4 [conv] p3: 式eは、いくつかの発明された一時変数(§8.5)Tの宣言T t=e;が整形式である場合に限り、暗黙的に型に変換できますt。特定の言語構成では、式をブール値に変換する必要があります。そのeようなコンテキストに現れる式は、いくつかの発明された一時変数t(§8.5)について、宣言が整形式である場合に限り、文脈変換されbool、整形式bool t(e);であると言われます。 強調表示された部分は、「暗黙の明示的キャスト」(標準では「コンテキスト変換」と呼ばれます)を@Rとして明確に示しています。マルティーニョが言った。 「暗黙の明示的キャスト」を必要とする「特定の言語構成体」は、次のように見えます。 if、while、for(§6.4 [stmt.select] p4) 二項論理演算子&amp;&amp;と||(§5.14 [expr.log.and/or] p1両方) 論理否定演算子!(§5.3.1 [expr.unary.op] p9) 条件演算子?:(§5.14 [expr.cond] p1) static_assert(§7 [dcl.dcl] p4) noexcept(§15.4 [except.spec] p2) タイトルの仮定は正しいですか?潜在的な欠点を見落としていないことを願っています。

4
「引数依存ルックアップ」(別名ADL、または「ケーニッヒルックアップ」)とは何ですか?
引数に依存するルックアップが何であるかについてのいくつかの良い説明は何ですか?多くの人がケーニッヒルックアップとも呼んでいます。 できれば知りたいです。 なぜそれが良いのですか? なぜそれが悪いのですか? それはどのように機能しますか?

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