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

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


7
最適化が有効になっていると異なる浮動小数点結果-コンパイラのバグ?
以下のコードは、最適化の有無にかかわらずVisual Studio 2008で動作します。しかし、それは最適化なしのg ++​​でのみ機能します(O0)。 #include <cstdlib> #include <iostream> #include <cmath> double round(double v, double digit) { double pow = std::pow(10.0, digit); double t = v * pow; //std::cout << "t:" << t << std::endl; double r = std::floor(t + 0.5); //std::cout << "r:" << r << std::endl; return r / …
109 c++  optimization  g++  c++-faq 

4
透明コンパレータとは何ですか?
C ++ 14では、連想コンテナはC ++ 11から変更されたようです– [associative.reqmts] / 13はこう言っています: メンバ関数テンプレートはfind、count、lower_bound、upper_bound、およびequal_rangeタイプがない限り、オーバーロードの解決に参加してはならないCompare::is_transparent存在します。 コンパレータを「透明」にする目的は何ですか? C ++ 14には、次のようなライブラリテンプレートも用意されています。 template <class T = void> struct less { constexpr bool operator()(const T& x, const T& y) const; typedef T first_argument_type; typedef T second_argument_type; typedef bool result_type; }; template <> struct less<void> { template <class T, class U> …
106 c++  c++14  c++-faq 

3
std :: getline()がフォーマットされた抽出後に入力をスキップするのはなぜですか?
ユーザーに名前と状態の入力を求める次のコードがあります。 #include <iostream> #include <string> int main() { std::string name; std::string state; if (std::cin >> name && std::getline(std::cin, state)) { std::cout << "Your name is " << name << " and you live in " << state; } } 私が見つけたのは、名前は正常に抽出されたが、州は抽出されなかったということです。これが入力と結果の出力です。 Input: "John" "New Hampshire" Output: "Your name is John and …
105 c++  input  iostream  istream  c++-faq 

3
単純な「Hello World」スタイルのプログラムがTurbo C ++でコンパイルされないのはなぜですか?
プログラミングクラスのC ++の学習を始めました。この「Hello World」プログラムをダウンロードしました: #include <iostream> using namespace std; int main() { cout << "Hello, World!"; return 0; } しかしターボC ++は不平を言います: Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM' Error D:\HELLO.CPP 2: Declaration syntax error Error D:\HELLO.CPP 6: Undefined symbol 'cout' この非常に単純なプログラムの何が問題になっていますか?これらのエラーを修正するにはどうすればよいですか?
101 c++  turbo-c++  c++-faq 

4
cout << a ++ << a;の正しい答えは何ですか?
最近のインタビューで、次の客観的なタイプの質問がありました。 int a = 0; cout &lt;&lt; a++ &lt;&lt; a; 答え: a。10 b。01 c。未定義の動作 選択肢bに答えました。つまり、出力は「01」になります。 しかし、驚いたことに、インタビュアーから正しい答えはオプションc:未定義であると言われました。 今、私はC ++のシーケンスポイントの概念を知っています。次のステートメントの動作は未定義です。 int i = 0; i += i++ + i++; しかし、文の私の理解あたりとしてcout &lt;&lt; a++ &lt;&lt; a、ostream.operator&lt;&lt;()最初で、二回呼び出されますostream.operator&lt;&lt;(a++)以降ostream.operator&lt;&lt;(a)。 VS2010コンパイラで結果を確認したところ、その出力も「01」です。
98 c++  c++-faq 

17
関数ポインタのポイントは何ですか?
関数ポインタの有用性がわかりません。場合によっては(おそらく存在しますが)役立つと思いますが、関数ポインターを使用する方が良い場合や避けられない場合は考えられません。 (CまたはC ++での)関数ポインタの適切な使用例をいくつか教えてください。
94 c++  c  function  pointers  c++-faq 

16
C ++での循環シフト(回転)操作のベストプラクティス
左および右シフト演算子(&lt;&lt;および&gt;&gt;)は、C ++ですでに使用可能です。しかし、循環シフトまたは回転操作を実行する方法を見つけることができませんでした。 「左回転」「右回転」などの操作はどのように行うのですか? ここで2回右に回転 Initial --&gt; 1000 0011 0100 0010 結果として: Final --&gt; 1010 0000 1101 0000 例が参考になります。 (編集者注:Cで回転を表現する多くの一般的な方法は、回転カウントがゼロの場合、または単一の回転機械命令以上にコンパイルされる場合、未定義の動作の影響を受けます。この質問の回答は、ベストプラクティスを文書化する必要があります。)

2
演算子の優先順位以外に、余分な括弧はいつ効果がありますか?
C ++の括弧は多くの場所で使用されます。たとえば、関数の呼び出しやグループ化式で演算子の優先順位を上書きします。不正な余分な括弧(関数呼び出しの引数リストの周りなど)を除いて、C ++の一般的な(ただし絶対ではない)規則は、余分な括弧が害を及ぼすことはありません。 5.1一次式[expr.prim] 5.1.1一般[expr.prim.general] 6括弧で囲まれた式は、型と値が囲まれた式と同じである1次式です。括弧の存在は、式が左辺値かどうかには影響しません。括弧で囲まれた式は、別段の指示がない限り、囲まれた式を使用できるのとまったく同じコンテキストで、同じ意味で使用できます。 質問:基本的な演算子の優先順位を上書きする以外に、余分な括弧がC ++プログラムの意味を変更するのはどのコンテキストですか? 注:意味の異なる2つの構文を許可するのではなく、構文を制限するので、括弧なしのメンバーへのポインター構文の制限&amp;qualified-idは範囲外と見なします。同様に、プリプロセッサマクロ定義内で括弧を使用すると、不要な演算子の優先順位を防ぐことができます。

2
名前は同じだがシグネチャが異なる関数
同じ名前の関数がありますが、基本クラスと派生クラスで署名が異なります。派生クラスから継承する別のクラスで基本クラスの関数を使用しようとすると、エラーが発生します。次のコードを参照してください。 class A { public: void foo(string s){}; }; class B : public A { public: int foo(int i){}; }; class C : public B { public: void bar() { string s; foo(s); } }; gccコンパイラーから次のエラーを受け取ります。 In member function `void C::bar()': no matching function for call to `C::foo(std::string&amp;)' candidates are: …

3
「as-if」ルールとは正確には何ですか?
タイトルの通り、 「as-if」ルールとは正確には何ですか? 典型的な答えは次のとおりです。 プログラムの監視可能な動作を変更しない、あらゆるコード変換を許可するルール 時々、このルールに起因する特定の実装から動作を取得し続けます。何度も間違って。だから、このルールは正確には何ですか。この規格では、この規則がセクションまたは段落として明確に言及されていないため、この規則の範囲に正確に該当するものは何ですか?私には、標準で詳細に定義されていない灰色の領域のように見えます。誰かが標準からの参照を引用して詳細を詳しく説明できますか? 注:これはCとC ++の両方としてタグ付けします。これは、両方の言語に関連するためです。
89 c++  c  optimization  c++-faq  as-if 

5
共有ポインタを引数として渡す
共有ポインタでラップされたオブジェクトを宣言すると、次のようになります。 std::shared_ptr&lt;myClass&gt; myClassObject(new myClass()); それから私はそれをメソッドへの引数として渡したいと思いました: DoSomething(myClassObject); //the called method void DoSomething(std::shared_ptr&lt;myClass&gt; arg1) { arg1-&gt;someField = 4; } 上記は単にshared_ptの参照カウントをインクリメントするだけで、すべてがクールですか?それとも、ダングリングポインタを残しますか? あなたはまだこれをすることになっていますか?: DoSomething(myClassObject.Get()); void DoSomething(std::shared_ptr&lt;myClass&gt;* arg1) { (*arg1)-&gt;someField = 4; } (スマートポインタ全体ではなく)1つのアドレスをコピーするだけでよいため、2番目の方法の方が効率的かもしれないと思いますが、1番目の方法の方が読みやすく、パフォーマンスの制限を押し上げることはないと思います。危険なものがないことを確認したいだけです。 ありがとうございました。

2
gcc / g ++:「そのようなファイルやディレクトリはありません」
g++ 次の形式のエラーが表示されます。 foo.cc:&lt;line&gt;:&lt;column&gt;: fatal error: &lt;bar&gt;: No such file or directory compilation terminated. を使用してCプログラムをコンパイルする場合も同じgccです。 何故ですか? 注意:この質問はこれまで何度も質問されてきましたが、そのたびに質問者の状況に固有のものでした。この質問の目的は、他の人が、一度限りの複製として閉じることができるという質問をすることです。よくある質問。
88 c++  c  gcc  g++  c++-faq 

3
C ++でコンストラクターと=演算子のオーバーロードをコピーする:一般的な関数は可能ですか?
コピーコンストラクター以来 MyClass(const MyClass&amp;); および=演算子のオーバーロード MyClass&amp; operator = (const MyClass&amp;); ほぼ同じコード、同じパラメーターを持ち、戻り値が異なるだけですが、両方が使用する共通の関数を持つことは可能ですか?

1
テンプレート演繹ガイドとは何ですか?いつ使用する必要がありますか?
C ++ 17標準では、「テンプレート演繹ガイド」が導入されています。これらは、このバージョンの標準で導入されたコンストラクターの新しいテンプレート引数の推論と関係があると思いますが、それらが何であり、何のためにあるのかについての簡単なFAQスタイルの説明はまだ見ていません。 C ++ 17のテンプレート控除ガイドとは何ですか? なぜ(そしていつ)それらが必要なのですか? どうすれば宣言できますか?

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