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

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

7
std :: unique_ptrを関数に渡すにはどうすればよいですか
どうすればstd::unique_ptr関数にを渡すことができますか?次のクラスがあるとしましょう。 class A { public: A(int val) { _val = val; } int GetVal() { return _val; } private: int _val; }; 以下はコンパイルされません。 void MyFunc(unique_ptr<A> arg) { cout << arg->GetVal() << endl; } int main(int argc, char* argv[]) { unique_ptr<A> ptr = unique_ptr<A>(new A(1234)); MyFunc(ptr); return 0; } なぜstd::unique_ptr関数にを渡せないのですか?確かに、これが構成の主な目的ですか?または、C ++委員会は、生のCスタイルのポインターにフォールバックして次のように渡すことを意図していましたか? …
100 c++  c++11  unique-ptr 

3
文字列ベクトルの特定の要素の位置を取得し、それを整数ベクトルのインデックスとして使用するにはどうすればよいですか?
のベクトルの要素のインデックスを取得しようとしています。これstringsをintタイプの別のベクトルのインデックスとして使用しますが、これは可能ですか? 例: vector <string> Names; vector <int> Numbers; ... // condition to check whether the name exists or not if((find(Names.begin(), Names.end(), old_name_)) != Names.end()) { // if yes cout <<"Enter the new name."<< endl; cin >> name; replace(Names.begin(), Names.end(), old_name_, name); } 次にold_name、Namesベクター内の特定の要素へのアクセスに使用するために、ベクター内のの位置を取得しますNumbers。私が言えるように: Numbers[position] = 3 ; // or whatever …
99 c++ 

3
この人物はMicrosoft Paintで「Hello World」をどのようにコーディングしましたか?
私はこの数日以内にこれを見たばかりで、それがどのように機能するのか理解できません。私が話すビデオはここにあります: これは、このStack Overflowの質問からの最高評価の回答です。なぜこのプログラムが3つのコンパイラによって拒否されたのですか? このビットマップはどのようにして「Hello World」のC ++プログラムを表示できますか?
99 c++  c  paint 

3
ベースへのポインタは派生オブジェクトの配列を指すことができますか?
今日は就職の面接に行って、この興味深い質問を受けました。 メモリリークと仮想dtorがないという事実に加えて、このコードがクラッシュするのはなぜですか? #include <iostream> //besides the obvious mem leak, why does this code crash? class Shape { public: virtual void draw() const = 0; }; class Circle : public Shape { public: virtual void draw() const { } int radius; }; class Rectangle : public Shape { public: virtual void …
99 c++  pointers 

2
C ++ 20でstd :: ssize()が導入されたのはなぜですか?
C ++ 20std::ssize()は以下のように無料関数を導入しました: template <class C> constexpr auto ssize(const C& c) -> std::common_type_t<std::ptrdiff_t, std::make_signed_t<decltype(c.size())>>; 可能な実装はcl ass Cのメンバー関数のstatic_cast戻り値を対応する符号付きに変換するためにを使用しているようです。size() size()C のメンバー関数は常に非負の値を返すので、なぜ誰かがそれらを符号付き変数に格納したいのでしょうか?本当に望んでいる場合、それは単純な問題ですstatic_cast。 なぜstd::ssize()C ++ 20で導入されたのですか?
99 c++  stl  unsigned  signed  c++20 

12
C ++プリプロセッサ__VA_ARGS__引数の数
ネットで答えが見つからなかった簡単な質問。可変個引数マクロで、引数の数を見つける方法は?解決策があれば、ブーストプリプロセッサーで大丈夫です。 それが違いを生む場合、可変数のマクロ引数を変換して、プリプロセッサのシーケンス、リスト、または配列をブーストして、さらに再処理します。


5
C ++がconstオブジェクトをデフォルトで構築するためにユーザー提供のデフォルトコンストラクターを必要とするのはなぜですか?
C ++標準(セクション8.5)は次のように述べています。 プログラムがconst修飾型Tのオブジェクトのデフォルト初期化を要求する場合、Tはユーザー提供のデフォルトコンストラクターを持つクラス型になります。 どうして?この場合、ユーザー提供のコンストラクターが必要な理由は考えられません。 struct B{ B():x(42){} int doSomeStuff() const{return x;} int x; }; struct A{ A(){}//other than "because the standard says so", why is this line required? B b;//not required for this example, just to illustrate //how this situation isn't totally useless }; int main(){ const A a; }
99 c++ 

4
C ++ 14にすでに汎用ラムダがある場合に、C ++ 20に導入されたテンプレートラムダの必要性は何ですか?
c ++ 14 以下を書くことを可能にする一般的なラムダを導入しました: auto func = [](auto a, auto b){ return a + b; }; auto Foo = func(2, 5); auto Bar = func("hello", "world"); このジェネリックなラムダはfunc、テンプレート関数funcが機能するのと同じように機能することは明らかです。 C ++委員会が汎用ラムダのテンプレート構文を追加することにしたのはなぜですか?


11
エラーLNK2019を解決する方法:未解決の外部シンボル-関数?
このエラーが発生しましたが、修正方法がわかりません。 私はVisual Studio 2013を使用しています。ソリューション名をMyProjectTestにしました。 これはテストソリューションの構造です。 - function.h #ifndef MY_FUNCTION_H #define MY_FUNCTION_H int multiple(int x, int y); #endif -function.cpp #include "function.h" int multiple(int x, int y){ return x*y; } - main.cppに #include <iostream> #include <cstdlib> #include "function.h" using namespace std; int main(){ int a, b; cin >> a >> b; cout …


6
vector <bool>がSTLコンテナではないのはなぜですか?
スコットマイヤーズの本の効果的なSTLの項目18 :標準テンプレートライブラリの使用を改善するための50の特定の方法vector &lt;bool&gt;は、STLコンテナではなく、実際にはboolsを保持しないため、避けるようにと言っています。 次のコード: vector &lt;bool&gt; v; bool *pb =&amp;v[0]; コンパイルされず、STLコンテナの要件に違反します。 エラー: cannot convert 'std::vector&lt;bool&gt;::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization vector&lt;T&gt;::operator []戻り値の型はであるはずですがT&amp;、なぜそれがvector&lt;bool&gt;ですか? なに vector&lt;bool&gt;実際には構成されていますか? アイテムはさらに言う: deque&lt;bool&gt; v; // is a STL container and it really contains bools これをの代替として使用できますvector&lt;bool&gt;か? 誰もがこれを説明できますか?

16
複数の「for」ループを作成するクリーンな方法
複数の次元を持つ配列の場合、通常for、その次元ごとにループを作成する必要があります。例えば: vector&lt; vector&lt; vector&lt;int&gt; &gt; &gt; A; for (int k=0; k&lt;A.size(); k++) { for (int i=0; i&lt;A[k].size(); i++) { for (int j=0; j&lt;A[k][i].size(); j++) { do_something_on_A(A[k][i][j]); } } } double B[10][8][5]; for (int k=0; k&lt;10; k++) { for (int i=0; i&lt;8; i++) { for (int j=0; j&lt;5; j++) { do_something_on_B(B[k][i][j]); …
98 c++  for-loop 

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 

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