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

C ++は汎用プログラミング言語です。もともとCの拡張として設計され、構文は似ていますが、現在は完全に異なる言語になっています。このタグは、C ++コンパイラでコンパイルされる(される)コードに関する質問に使用します。特定の標準リビジョン[C ++ 11]、[C ++ 14]、[C ++ 17]または[C ++ 20]などに関連する質問には、バージョン固有のタグを使用します。

7
std :: stringを使用したprintf?
私はそれstringがstd名前空間のメンバーであることを理解しているのに、なぜ以下が発生するのですか? #include <iostream> int main() { using namespace std; string myString = "Press ENTER to quit program!"; cout << "Come up and C++ me some time." << endl; printf("Follow this command: %s", myString); cin.get(); return 0; } プログラムが実行されるたびに、myString上記の出力のように、ランダムに見える3文字の文字列が出力されます。
157 c++  string  namespaces  printf  std 

2
C ++継承-アクセスできないベース?
基本クラスを関数パラメーターとして使用できないようですが、継承をめちゃくちゃにしましたか? 私のメインには以下があります: int some_ftn(Foo *f) { /* some code */ }; Bar b; some_ftn(&b); そして、そのような方法でFooを継承するクラスBar: class Bar : Foo { public: Bar(); //snip private: //snip }; これはうまくいきませんか?私のメイン関数でその呼び出しを行うことができないようです
157 c++  inheritance 

6
ラムダでキャプチャを移動
C ++ 11ラムダで移動(右辺値参照とも呼ばれます)でキャプチャするにはどうすればよいですか? 私はこのようなものを書こうとしています: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };


8
C ++ライブラリとフレームワークがスマートポインターを使用しないのはなぜですか?
私はいくつかの記事を読んで、生のポインタはほとんど使用してはならないことを述べました。代わりに、スコープ付きポインターでも共有ポインターでも、常にスマートポインター内にラップする必要があります。 しかし、Qtのようなフレームワーク、wxWidgets、Boostのようなライブラリーは、スマートポインターをまったく使用していないかのように、返ったり期待したりしないことに気づきました。代わりに、生のポインタを返すか期待します。その理由はありますか?パブリックAPIを作成するとき、スマートポインターに近づかないでください。なぜですか。 多くの主要なプロジェクトがスマートポインターを回避しているように思われるのに、なぜスマートポインターが推奨されるのか疑問に思っています。


7
std :: enable_ifでメンバー関数を条件付きでコンパイル
簡単な例を使って、使い方を理解しようとしていますstd::enable_if。この回答を読んだ後、簡単な例を考え出すのはそれほど難しくないと思いました。std::enable_if2つのメンバー関数から選択して、そのうちの1つだけを使用できるようにしたい。 残念ながら、以下はgcc 4.7でコンパイルできません。何時間も試行した後、私の間違いは何ですかと皆さんに尋ねています。 #include <utility> #include <iostream> template< class T > class Y { public: template < typename = typename std::enable_if< true >::type > T foo() { return 10; } template < typename = typename std::enable_if< false >::type > T foo() { return 10; } }; int main() { Y< …
156 c++  templates  g++  c++11 


14
Scalaの演算子が「良い」のに、C ++の「悪い」のオーバーロードが発生するのはなぜですか。
C ++での演算子のオーバーロードは、多くの人にとってA Bad Thing(tm)であると考えられており、新しい言語ではミスを繰り返さないでください。確かに、これはJavaの設計時に特に削除された機能の1つでした。 Scalaについて読み始めたところ、演算子のオーバーロードに非常によく似ていることがわかりました(ただし、技術的には演算子がないため、関数だけなので、演算子のオーバーロードはありません)。ただし、C ++での演算子のオーバーロードとは質的に異なるようには思われません。C++では、演算子は特別な関数として定義されています。 それで私の質問は、Scalaで "+"を定義するアイデアがC ++でのアイデアよりも優れている理由は何ですか?

3
std :: stringの文脈での頭字語SSOの意味
では、最適化とコードのスタイルについてC ++質問、いくつかの答えは、のコピーを最適化する文脈で「SSO」を参照しましたstd::string。そのコンテキストでSSOはどういう意味ですか? 明らかに「シングルサインオン」ではありません。「共有文字列の最適化」でしょうか。
155 c++  string  optimization 

7
1つのベクトルを別のベクトルにコピーする高速な方法
私は2つの方法を好む: void copyVecFast(const vec<int>& original) { vector<int> newVec; newVec.reserve(original.size()); copy(original.begin(),original.end(),back_inserter(newVec)); } void copyVecFast(vec<int>& original) { vector<int> newVec; newVec.swap(original); } どうやってやるの?
155 c++  algorithm  stl 

10
C ++のdynamic_castおよびstatic_cast
dynamic_castC ++ のキーワードとはかなり混乱しています。 struct A { virtual void f() { } }; struct B : public A { }; struct C { }; void f () { A a; B b; A* ap = &b; B* b1 = dynamic_cast<B*> (&a); // NULL, because 'a' is not a 'B' B* b2 …
155 c++  dynamic-cast 

3
std :: forwardを使用して引数を転送するのはいつですか?
C ++ 0xは、次の使用例を示していますstd::forward。 template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); } いつ使用すると有利std::forwardですか? また、&&パラメーター宣言で使用する必要がありますが、すべての場合に有効ですか?関数がその中で宣言さ&&れている場合、関数に一時変数を渡す必要があると思ったので、任意のパラメーターでfooを呼び出すことができますか? 最後に、次のような関数呼び出しがある場合: template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); } 代わりにこれを使用する必要があります: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); } また、関数でパラメータを2回使用する場合、つまり2つの関数に同時に転送する場合、使用するのが賢明std::forwardですか?しませんstd::forwardメモリを移動し、二回の一時的に同じことを変換し、それが二次利用のために無効にしますか?次のコードは大丈夫でしょうか: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); doSomethingWeird<val, Params...>(std::forward<Params>(args)...); …

3
なぜ「b <a?「a <b?の代わりにa:b」b:a” maxテンプレートを実装するには?
C ++テンプレート-完全ガイド、第2版では、maxテンプレートが導入されています。 template&lt;typename T&gt; T max (T a, T b) { // if b &lt; a then yield a else yield b return b &lt; a ? a : b; } そしてそれは“b &lt; a ? a : b”代わりに使用することを説明します“a &lt; b ? b : a”: [StepanovNotes]によるmax()テンプレートは意図的に「b &lt;a?「a &lt;b?の代わりにa:b」b:a” 2つの値が等しくても等しくない場合でも、関数が正しく動作することを確認します。 「even if …
154 c++  templates 

12
C ++で純粋な仮想デストラクタが必要なのはなぜですか?
仮想デストラクタの必要性を理解しています。しかし、なぜ純粋な仮想デストラクタが必要なのでしょうか。C ++の記事の1つで、著者は、クラスを抽象化するときに純粋な仮想デストラクタを使用すると述べています。 しかし、メンバー関数のいずれかを純粋な仮想関数にすることで、クラスを抽象化できます。 だから私の質問は デストラクタを本当に仮想化するのはいつですか?誰かが良いリアルタイムの例を挙げられますか? 抽象クラスを作成するときに、デストラクタも純粋に仮想化することをお勧めしますか?はいの場合、なぜですか?

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