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

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

18
ポインターを削除した後でNULLにすることは良い習慣ですか?
まず、スマートポインタを使用することから始めます。これについて心配する必要はありません。 次のコードの問題は何ですか? Foo * p = new Foo; // (use p) delete p; p = NULL; これは、別の質問に対する回答とコメントによって刺激されました。Neil Butterworthからの1つのコメントで、いくつかの賛成票が生成されました。 削除後にポインターをNULLに設定することは、C ++では普遍的な推奨事項ではありません。これを行うのが良い場合もあれば、無意味でエラーを隠すことができる場合もあります。 それが役に立たない状況はたくさんあります。しかし、私の経験では、害はありません。誰かが私を啓発します。

24
複数のC ++文字列を1行に連結するにはどうすればよいですか?
C#には、多くのデータ型を1行で連結できる構文機能があります。 string s = new String(); s += "Hello world, " + myInt + niceToSeeYouString; s += someChar1 + interestingDecimal + someChar2; C ++で同等のものは何ですか?私が見る限り、+演算子を使用した複数の文字列/変数をサポートしていないため、すべてを別々の行で行う必要があります。これは問題ありませんが、見栄えがよくありません。 string s; s += "Hello world, " + "nice to see you, " + "or not."; 上記のコードはエラーを生成します。

11
C ++で乱数を生成する方法は?
私はサイコロでゲームを作ろうとしています、そしてその中に乱数を入れる必要があります(サイコロの側面をシミュレートするために。1と6の間でそれを作る方法を知っています)。使用する #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { srand((unsigned)time(0)); int i; i = (rand()%6)+1; cout << i << "\n"; } プログラムを数回実行すると、次のような出力が得られるため、うまく機能しません。 6 1 1 1 1 1 2 2 2 2 5 2 したがって、5回続けて同じものではなく、毎回異なる乱数を生成するコマンドが必要です。これを行うコマンドはありますか?
150 c++  random 

19
型はその値に関係なく常に特定のサイズであるのはなぜですか?
実装は型の実際のサイズ間で異なる場合がありますが、ほとんどの場合、unsigned intやfloatなどの型は常に4バイトです。しかし、なぜ型はその値に関係なく常に特定の量のメモリを占有するのでしょうか。たとえば、255の値で次の整数を作成した場合 int myInt = 255; 次にmyInt、私のコンパイラで4バイトを占有します。しかし、実際の値は2551バイトだけで表すことができるので、なぜmyInt1バイトのメモリを占有しないのでしょうか。または、より一般的な質問の方法:値を表すために必要なスペースがそのサイズよりも小さい可能性があるのに、型に関連付けられているサイズが1つしかないのはなぜですか?
149 c++ 

5
もしあれば、C ++コンパイラーが末尾再帰の最適化を行いますか?
CとC ++の両方で末尾再帰の最適化を行うことは完全にうまくいくように思えますが、デバッグ中は、この最適化を示すフレームスタックが表示されないようです。スタックが再帰の深さを教えてくれるからです。ただし、最適化も同様によいでしょう。 C ++コンパイラーはこの最適化を行いますか?どうして?何故なの? コンパイラーに指示する方法を教えてください。 MSVCの場合:/O2または/Ox GCCの場合:-O2または-O3 コンパイラが特定のケースでこれを行ったかどうかを確認するのはどうですか? MSVCの場合、PDB出力がコードをトレースできるようにしてから、コードを検査します GCC ..? 特定の関数がコンパイラーによってこのように最適化されているかどうかを判断する方法については引き続き提案します(Konradがそれを想定するように指示していることを確信しているにもかかわらず) 無限再帰を行って無限ループまたはスタックオーバーフローが発生するかどうかを確認することで、コンパイラーがこれを実行するかどうかを常に確認することができます(GCCでこれを実行し、それで-O2十分であることがわかりました)。とにかく終了することがわかっている特定の機能をチェックできます。これをチェックする簡単な方法が欲しいです:) いくつかのテストの後、デストラクタがこの最適化を行う可能性を台無しにしていることを発見しました。特定の変数と一時オブジェクトのスコープを変更して、return-statementが始まる前にスコープから外れるようにすることは、価値がある場合があります。 末尾呼び出しの後にデストラクタを実行する必要がある場合、末尾呼び出しの最適化は実行できません。

12
なぜx [0]!= x [0] [0]!= x [0] [0] [0]なのですか?
私はC ++を少し勉強していて、ポインタを使って戦っています。次のように宣言することで、3レベルのポインタを使用できることを理解しています。 int *(*x)[5]; これ*xは、へのポインタである5つの要素の配列へのポインタintです。また、私はそれを知っているx[0] = *(x+0);、x[1] = *(x+1)ようにして.... それで、上記の宣言を考えると、なぜx[0] != x[0][0] != x[0][0][0]ですか?
149 c++  c  arrays  pointers 

17
constポインターのポイントは何ですか?
私はconst値へのポインターについて話しているのではなく、constポインター自体について話している。 私は非常に基本的なものを超えてCとC ++を学んでいて、今日まで、ポインタが値によって関数に渡されることに気づきました。これは理にかなっています。つまり、関数内では、呼び出し元からの元のポインターに影響を与えることなく、コピーしたポインターを他の値にポイントできます。 それで、関数ヘッダーがあることの意味は何ですか? void foo(int* const ptr); このような関数の内部では、ptrを他のものにポイントすることはできません。これはconstであり、変更したくないためですが、次のような関数です。 void foo(int* ptr); 同様に仕事をします!ポインタはとにかくコピーされ、コピーを変更しても呼び出し元のポインタは影響を受けないためです。それでは、constの利点は何ですか?
149 c++  c  pointers  const 

2
`void_t`の仕組み
私はウォルターブラウンがCppcon14で最新のテンプレートプログラミング(パートI、パートII)について語った彼のvoid_tSFINAEテクニックのプレゼンテーションを見ました。 例:すべてのテンプレート引数が正しい形式であるかどうか を評価する単純な変数テンプレートvoidがあるとします。 template< class ... > using void_t = void; そして、memberと呼ばれるメンバー変数の存在をチェックする次の特性: template< class , class = void > struct has_member : std::false_type { }; // specialized as has_member< T , void > or discarded (sfinae) template< class T > struct has_member< T , void_t< decltype( T::member ) > > …
149 c++  templates  c++14  sfinae 

2
`static const`と` const`のC ++セマンティクス
具体的にはC ++では、たとえば次のような意味上の違いは何ですか? static const int x = 0 ; そして const int x = 0 ; staticリンケージとストレージクラス指定子の両方(つまり、関数の内部と外部)。
149 c++ 

14
参照の配列が違法なのはなぜですか?
次のコードはコンパイルされません。 int a = 1, b = 2, c = 3; int& arr[] = {a,b,c,8}; C ++標準はこれについて何と言っていますか? 以下に示すように、参照を含むクラスを宣言し、そのクラスの配列を作成できることはわかっています。しかし、上記のコードがコンパイルされない理由を本当に知りたいのです。 struct cintref { cintref(const int & ref) : ref(ref) {} operator const int &() { return ref; } private: const int & ref; void operator=(const cintref &); }; int main() { int …
149 c++  arrays  reference 

8
PythonプログラムをC / C ++コードに変換しますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 3年前休業。 この質問を改善する PythonプログラムをC / C ++に変換することは可能ですか? いくつかのアルゴリズムを実装する必要があります。C/ C ++で実行するときに経験するすべての痛みを正当化するのに十分なパフォーマンスギャップがあるかどうかはわかりません(私は得意ではありません)。私は、1つの単純なアルゴリズムを作成して、そのような変換されたソリューションに対してベンチマークすることを考えました。それだけでPythonバージョンよりもはるかに高速である場合は、C / C ++で実行する以外に選択肢はありません。
149 c++  python  c  code-generation 

5
拡張GCC 6オプティマイザが実用的なC ++コードを壊すのはなぜですか?
GCC 6には新しいオプティマイザ機能があります。それthisは常にがnull ではないことを想定し、それに基づいて最適化します。 値の範囲の伝播は、C ++メンバー関数のthisポインターがnullでないことを前提としています。これにより、一般的なnullポインターチェックが不要になりますが、一部の非準拠コードベース(Qt-5、Chromium、KDevelopなど)も破損します。一時的な回避策として、-fno-delete-null-pointer-checksを使用できます。間違ったコードは、-fsanitize = undefinedを使用して識別できます。 変更文書は、頻繁に使用される驚くべき量のコードを破壊するため、これを危険だと明確に呼んでいます。 なぜこの新しい仮定が実用的なC ++コードを壊すのでしょうか?不注意または知識のないプログラマーがこの特定の未定義の動作に依存する特定のパターンはありますか?if (this == NULL)不自然なため、誰も書いていないようです。

9
テキストOpenCVの抽出
画像内のテキストの境界ボックスを見つけようとしていますが、現在このアプローチを使用しています。 // calculate the local variances of the grayscale image Mat t_mean, t_mean_2; Mat grayF; outImg_gray.convertTo(grayF, CV_32F); int winSize = 35; blur(grayF, t_mean, cv::Size(winSize,winSize)); blur(grayF.mul(grayF), t_mean_2, cv::Size(winSize,winSize)); Mat varMat = t_mean_2 - t_mean.mul(t_mean); varMat.convertTo(varMat, CV_8U); // threshold the high variance regions Mat varMatRegions = varMat > 100; このような画像が与えられると: それから私が示すとき私はvarMatRegionsこの画像を取得します: ご覧のように、テキストの左側のブロックとカードのヘッダーが少し組み合わされています。ほとんどのカードでは、この方法はうまく機能しますが、使用頻度の高いカードでは問題が発生する可能性があります。 …

3
クラステンプレートでの静的メンバーの初期化
私はこれをしたいと思います: template <typename T> struct S { ... static double something_relevant = 1.5; }; しかし、私something_relevantは整数型ではないのでできません。これはには依存しませんTが、既存のコードはの静的メンバーであることに依存していSます。 Sはテンプレートなので、コンパイルされたファイル内に定義を置くことはできません。この問題を解決するにはどうすればよいですか?
148 c++  templates  static 


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