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

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

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) 二項論理演算子&&と||(§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) タイトルの仮定は正しいですか?潜在的な欠点を見落としていないことを願っています。

9
C ++の内部typedefs-良いスタイルか悪いスタイルか?
私が最近頻繁に行っているのは、そのクラス内の特定のクラスに関連するtypedefを宣言することです。 class Lorem { typedef boost::shared_ptr<Lorem> ptr; typedef std::vector<Lorem::ptr> vector; // // ... // }; これらのタイプは、コードの他の場所で使用されます。 Lorem::vector lorems; Lorem::ptr lorem( new Lorem() ); lorems.push_back( lorem ); 私が好きな理由: クラステンプレートによって導入されたノイズを減らし、にstd::vector<Lorem>なりますLorem::vector。 これは意図の表明として機能します。上記の例では、Loremクラスは参照カウントboost::shared_ptrされ、ベクトルに格納されることを目的としています。 これにより、実装の変更が可能になります。つまりboost::intrusive_ptr、後の段階でLoremを(を介して)侵入参照参照に変更する必要がある場合、コードへの影響は最小限になります。 私はそれは「きれい」に見え、間違いなく読みやすいと思います。 気に入らない理由: 依存関係に問題がある場合があります-たとえば、Lorem::vector別のクラス内にを埋め込みたいが、(ヘッダーファイルに依存関係を導入するのではなく)Loremを転送宣言するだけでよい(またはしたい)場合は、最終的に明示的な型(たとえば、boost::shared_ptr<Lorem>ではなくLorem::ptr)。これは少し矛盾します。 それはあまり一般的ではないかもしれません、それゆえ理解するのは難しいですか? 私は自分のコーディングスタイルで客観的になるように努めていますので、私の考えを少し分析できるように、それについて他の意見を得ることは良いでしょう。

6
OpenCV C ++ / Obj-C:1枚の紙の検出/ Square検出
OpenCVの正方形検出の例をテストアプリケーションに正常に実装しましたが、出力がかなり乱雑なので、フィルター処理する必要があります。または、コードが間違っていますか? 私は(のようなスキュー低減のために紙の4つの隅の点に興味があること)、さらに処理... 入出力: 元の画像: クリック コード: double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 ) { double dx1 = pt1.x - pt0.x; double dy1 = pt1.y - pt0.y; double dx2 = pt2.x - pt0.x; double dy2 = pt2.y - pt0.y; return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10); …

14
C ++でファイル全体をstd :: stringに読み込むにはどうすればよいですか?
ファイルをに読み込む方法std::string、つまり、ファイル全体を一度に読み込む方法は? テキストモードまたはバイナリモードは、呼び出し元が指定する必要があります。ソリューションは、標準に準拠し、ポータブルで効率的でなければなりません。文字列のデータを不必要にコピーしてはならず、文字列の読み取り中にメモリの再割り当てを回避する必要があります。 これを行う1つの方法は、サイズ変更、ファイルサイズをstatをするだろうstd::stringとfread()へstd::stringのconst_cast<char*>()"編data()。これには、std::stringのデータが連続している必要がありますが、これは標準では必要ありませんが、既知のすべての実装に当てはまるようです。さらに悪いことに、ファイルがテキストモードで読み取られると、std::stringのサイズはファイルのサイズと一致しない場合があります。 完全に、正しい標準に準拠し、ポータブルソリューション使用して構築することができたstd::ifstreamのrdbuf()にstd::ostringstreamとにそこからstd::string。ただし、これにより文字列データがコピーされたり、メモリが不必要に再割り当てされたりする可能性があります。 関連するすべての標準ライブラリの実装は、すべての不要なオーバーヘッドを回避するのに十分スマートですか? それを行う別の方法はありますか? 目的の機能をすでに提供している隠れたBoost機能を見逃しましたか? void slurp(std::string& data, bool is_binary)
178 c++  string  file-io 


30
中括弧を省略するのはなぜ悪い習慣と考えられているのですか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 なぜ誰もが私にこのようなコードを書くことは悪い習慣だと言っているのですか? if (foo) Bar(); //or for(int i = 0 i < count; i++) Bar(i); 中括弧を省略することについての私の最大の議論は、中括弧が2倍になることがあるということです。たとえば、C#でラベルのグロー効果をペイントするコードは次のとおりです。 using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor))) { for (int x = 0; x <= GlowAmount; x++) { for (int y = 0; y <= GlowAmount; y++) { g.DrawString(Text, this.Font, br, new Point(IconOffset …
177 java  c#  c++  c  coding-style 

17
範囲外の配列にアクセスしてもエラーは発生しません、なぜですか?
C ++プログラムで次のように範囲外の値を割り当てています。 #include <iostream> using namespace std; int main() { int array[2]; array[0] = 1; array[1] = 2; array[3] = 3; array[4] = 4; cout << array[3] << endl; cout << array[4] << endl; return 0; } プログラムはとを印刷3し4ます。それは不可能であるべきです。私はg ++ 4.3.3を使用しています ここにコンパイルして実行するコマンドがあります $ g++ -W -Wall errorRange.cpp -o errorRange $ ./errorRange …
177 c++  arrays 

9
intの最大値
Integer.MaxValueJavaのC / C ++のような関数で(コンパイラに従って)整数の最大値を見つけるコードはありますか?
177 c++  c  stl  limits  numeric-limits 

6
反復しながらマップから削除する方法は?
反復しながらマップから削除するにはどうすればよいですか?お気に入り: std::map<K, V> map; for(auto i : map) if(needs_removing(i)) // remove it from the map 使用map.eraseするとイテレータが無効になります
177 c++  map  c++11 

30
C ++マクロが役立つのはいつですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 2年前休業。 この質問を改善する Cのプリプロセッサは、正当に恐れやC ++コミュニティで敬遠されます。インライン関数、consts、およびテンプレートは通常、の安全で優れた代替手段#defineです。 次のマクロ: #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0) タイプセーフより優れているわけではありません。 inline bool succeeded(int hr) { return hr >= 0; } ただし、マクロにはその位置があります。プリプロセッサなしでは実行できないマクロの用途を挙げてください。 投票できるように、各ユースケースを別々の回答に入れてください。また、前任者なしで回答の1つを達成する方法を知っている場合は、その回答のコメントでその方法を指摘してください。

8
ミューテックスの例/チュートリアル?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 4ヶ月前に閉鎖。 この質問を改善する 私はマルチスレッドに不慣れで、ミューテックスの仕組みを理解しようとしていました。多くのグーグル操作を行いましたが、ロックが機能しない独自のプログラムを作成したため、どのように機能するかについて疑問が残りました。 mutexの絶対に直感的でない構文の1つはですpthread_mutex_lock( &mutex1 );。ここでは、mutexがロックされているように見えますが、私が本当にロックしたいのは他の変数です。この構文は、ミューテックスをロックすると、ミューテックスがロック解除されるまでコードの領域をロックすることを意味しますか?次に、スレッドは領域がロックされていることをどのようにして知るのでしょうか。[ 更新:スレッドは、 メモリフェンシングによって領域がロックされていることを認識しています ]。そして、そのような現象はクリティカルセクションと呼ばれるべきではないでしょうか?[ 更新:重要なセクションオブジェクトはWindowsでのみ使用できます。オブジェクトはミューテックスよりも高速で、それを実装するスレッドにのみ表示されます。それ以外の場合、クリティカルセクションは、ミューテックスによって保護されているコードの領域を指します ] 簡単に言うと、最も簡単なミューテックスのサンプルプログラムと、それがどのように機能するかについてのロジックに関する可能な限り簡単な説明を手伝っていただけませんか?これは他の多くの初心者を助けると確信しています。

30
あなたが今まで遭遇した中で最悪の実世界のマクロ/プリプロセッサの乱用は何ですか?
ロックされています。この質問とトピックへの回答はロックされています。質問はトピックから外れていますが、歴史的に重要です。現在、新しい回答や相互作用を受け入れていません。 これまでに遭遇した中で最悪の 現実のマクロ/プリプロセッサの乱用は何ですか(不自然なIOCCCが* haha​​ *に回答しないでください)? 本当に面白い場合は、短いスニペットまたはストーリーを追加してください。目標は、常に「マクロを使用しない」ことを人々に教えるのではなく、何かを教えることです。 ps:以前にマクロを使用したことがありますが、通常は「実際の」ソリューションがあるときに最終的にそれらを削除します(実際のソリューションがインライン化されてマクロに似ている場合でも)。 おまけ:マクロがマクロ以外のソリューションよりも本当に優れていた例を挙げてください。 関連質問: C ++マクロはいつ有益ですか?
176 c++  c  macros  preprocessor 

22
C ++の静的コンストラクタ?プライベート静的オブジェクトを初期化する必要があります
プライベート静的データメンバー(すべての文字a〜zを含むベクトル)を持つクラスが必要です。JavaまたはC#では、クラスのインスタンスを作成する前に実行される「静的コンストラクタ」を作成し、クラスの静的データメンバーを設定するだけです。(変数は読み取り専用で、1度だけ設定する必要があるため)1回だけ実行され、クラスの関数であるため、プライベートメンバーにアクセスできます。ベクトルが初期化されているかどうかを確認し、初期化されていない場合は初期化するコードをコンストラクターに追加できますが、これにより多くの必要なチェックが導入され、問題の最適な解決策とは思えません。 変数は読み取り専用であるため、それらはpublic static constである可能性があるため、クラスの外で一度設定できると思いますが、もう一度、それは一種の醜いハックのように思えます。 インスタンスコンストラクターで初期化したくない場合、クラスにプライベート静的データメンバーを含めることはできますか?

16
カスタムC ++アロケーターの説得力のある例?
std::allocatorカスタムソリューションを採用する理由は何ですか?正確性、パフォーマンス、スケーラビリティなどのために絶対に必要な状況に遭遇しましたか?本当に賢い例はありますか? カスタムアロケーターは、常に標準ライブラリの機能であり、あまり必要がありませんでした。ここのSOの誰かが彼らの存在を正当化するための説得力のある例を提供できるかどうか疑問に思っていました。

9
実装された純粋な仮想関数
私の基本的な理解は、純粋仮想関数の実装がないということですが、純粋仮想関数の実装があるかもしれないと言われました。 class A { public: virtual void f() = 0; }; void A::f() { cout<<"Test"<<endl; } 上記のコードは大丈夫ですか? それを実装を備えた純粋な仮想関数にする目的は何ですか?
176 c++  pure-virtual 

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