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

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

15
exprでオーバーフローを回避する方法。あいうえお
:私はのように見える表現を計算する必要があり A*B - C*D、その種類は次のとおりです。signed long long int A, B, C, D; それぞれの数字は(その型をオーバーフローしない)本当に大きなことができます。一方でA*B、オーバーフローを引き起こす可能性があり、同時に式はA*B - C*D本当に小さくすることができます。どうすれば正しく計算できますか? 例:MAX * MAX - (MAX - 1) * (MAX + 1) == 1、ここでMAX = LLONG_MAX - n、n-ある自然数。
161 c++  c  integer-overflow 

2
このCコードでアルファベットが複数の範囲に分割されるのはなぜですか?
カスタムライブラリで実装を見ました: inline int is_upper_alpha(char chValue) { if (((chValue >= 'A') && (chValue <= 'I')) || ((chValue >= 'J') && (chValue <= 'R')) || ((chValue >= 'S') && (chValue <= 'Z'))) return 1; return 0; } それはイースターエッグですか、それとも標準のC / C ++メソッドと比較した場合の利点は何ですか? inline int is_upper_alpha(char chValue) { return ((chValue >= 'A') && (chValue …
161 c++  c  character  toupper 

19
機能するC ++リファクタリングツールはありますか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?トピックに合うように質問を更新してくださいStack Overflowのと。 6か月前に閉鎖。 この質問を改善する 大規模なコードベース(約100.000行)で確実に機能するC ++用のフル機能のリファクタリングツールを知っている人はいますか? 私はここ数年、何度も何度も見つけられるものを試しました:SlickEdit、Eclipse CDT。それらはすべてまったく使用できませんでした。 概要:私は時間をかけて「Visual Assist X」および「C ++のリファクタリング」を評価しました。どちらにもいくつかの印象的な機能がありますが、どちらも完璧とはほど遠いものです。通常、コードの大きなブロックを抽出することは、手動での変更なしでは満足のいくものではありません。そのため、効果はありません。 「Visual Assist X」には、より完全なオートコンプリートなどの優れた機能があります。ただし、特定のポイントでちらつきが多くなり、速度が大幅に低下します。 したがって、私の意見では、答えは「いいえ、C ++用の本番環境対応のリファクタリングツールはありません」です。 UPDATE 2015年3月 hdoghmensの返信については、今日、C ++用のResharperを試しました。彼のリンク https://www.jetbrains.com/resharper/はC ++について何も述べていません。しかし、ここで1年以上前に発表されたResharper C ++を見つけました。 https://www.jetbrains.com/resharper/features/cpp.html 20MBのコードベースを使ってVC2010で試してみました。 テスト1:メソッドの抽出:Resharper例外が発生します。ソースコードは変更されていません。 テスト2:ソースが異なるメソッドの抽出:正常に機能する テスト3:抽出された関数の署名を変更する:壊れたC ++コードの結果: bool myclass::do_work123(<unknown long Color>int& Filled*&, long, int&) おそらくそれがC ++がメインページにリストされていない理由です。 私の意見では、この質問への答えはまだ「いいえ」です。
161 c++  refactoring 

11
パラメーター付きのコンストラクターを作成すると、デフォルトのパラメーターレスコンストラクターがなくなる理由
C#、C ++、およびJavaでは、パラメーターを受け取るコンストラクターを作成すると、パラメーターのないデフォルトのコンストラクターがなくなります。私は常にこの事実を受け入れてきましたが、今はなぜなのかと思い始めています。 この動作の理由は何ですか?「独自のコンストラクターを作成した場合、おそらくこの暗黙的なコンストラクターをぶら下げたくない」と言っているだけの「安全対策/推測」ですか?それとも、自分でコンストラクタを作成した後にコンパイラが追加できないようにする技術的な理由がありますか?

7
std :: function vsテンプレート
C ++ 11のおかげでstd::function、ファンクターラッパーのファミリーを受け取りました。残念ながら、私はこれらの新しい追加について悪いことだけを聞き続けます。最も人気があるのは、ひどく遅いということです。私はそれをテストしました、そして彼らはテンプレートと比較して本当に吸います。 #include <iostream> #include <functional> #include <string> #include <chrono> template <typename F> float calc1(F f) { return -1.0f * f(3.3f) + 666.0f; } float calc2(std::function<float(float)> f) { return -1.0f * f(3.3f) + 666.0f; } int main() { using namespace std::chrono; const auto tp1 = system_clock::now(); for (int i …

5
なぜrequireが必要なのですか?
C ++ 20の概念の隅の1つは、作成しなければならない特定の状況があることですrequires requires。たとえば、[expr.prim.req] / 3の次の例: Aは必要-発現はまた、で使用することができ、必要句下記のようなテンプレート引数にアドホック制約を書き込む方法として([TEMP]): template<typename T> requires requires (T x) { x + x; } T add(T a, T b) { return a + b; } 最初のrequireはrequire-clauseを導入し、2番目はrequire-expressionを導入します。 その2番目のrequiresキーワードが必要になる背後にある技術的な理由は何ですか?書き込みを許可できないのはなぜですか。 template<typename T> requires (T x) { x + x; } T add(T a, T b) { return a + …
161 c++  c++-concepts  c++20 

3
std :: moveとstd :: forwardの違いは何ですか
私はここでこれを見ました: 基本クラスのMoveコンストラクターを呼び出すMoveコンストラクター 誰かが説明できますか: 差std::moveとstd::forward、好ましくは、いくつかのコード例をしますか? それを簡単に考える方法、およびいつ使用するか

9
C ++のスタック、静的、およびヒープ
私は検索しましたが、これらの3つの概念をよく理解していません。動的割り当て(ヒープ内)を使用する必要があるのはいつですか?その実際の利点は何ですか?静的およびスタックの問題は何ですか?ヒープに変数を割り当てずにアプリケーション全体を作成できますか? 他の言語には「ガベージコレクター」が組み込まれているので、メモリを気にする必要はありません。ガベージコレクターは何をしますか? このガベージコレクタを使用して実行できなかったメモリを自分で操作するにはどうすればよいでしょうか。 誰かがこの宣言でそれを私に言ったら: int * asafe=new int; 「ポインタへのポインタ」があります。どういう意味ですか?それは次の点で異なります。 asafe=new int; ?

3
生データへのstd :: vectorポインターを取得する方法?
配列std::vectorとして使用しようとしていますchar。 私の関数はvoidポインターを受け取ります: void process_data(const void *data); 私が単にこのコードを使用する前に: char something[] = "my data here"; process_data(something); 期待どおりに機能しました。 しかし、今はの動的性が必要なので、std::vector代わりにこのコードを試しました。 vector<char> something; *cut* process_data(something); 問題は、charのベクトルを関数に渡して、ベクトルの生データにアクセスできるようにする方法です(それがどの形式であるかに関係なく、フロートなど)? 私はこれを試しました: process_data(&something); この: process_data(&something.begin()); しかし、意味不明なデータへのポインタを返し、後者は警告を出しました:warning C4238: nonstandard extension used : class rvalue used as lvalue。
160 c++  stl  vector 

3
標準コンテナの複雑さの保証は何ですか?
どうやら;-)標準コンテナは何らかの形の保証を提供します。 どのタイプの保証があり、正確には、異なるタイプのコンテナの違いは何ですか? SGIページからの作業(STLについて)私はこれを思いつきました: Container Types: ================ Container: Forward Container Reverse Container Random Access Container Sequence Front Insert Sequence Back Insert Sequence Associative Container Simple Associative Container Pair Associative Container Sorted Associative Container Multiple Associative Container Container Types mapped to Standard Containers ============================================= std::vector: Sequence Back Sequence Forward/Reverse/Random Container std::deque: Sequence …
160 c++  stl  containers  big-o 

14
Windowsでの画面キャプチャの最速の方法
Windowsプラットフォーム用のスクリーンキャストプログラムを作成したいのですが、画面をキャプチャする方法がわかりません。私が知っている唯一の方法はGDIを使用することですが、これに対処する方法が他にあるかどうか知りたいです。速度が優先されます。 スクリーンキャスティングプログラムはゲーム映像を記録するためのものですが、これによりオプションが絞り込まれた場合でも、この範囲外のその他の提案があれば、私はまだ開いています。結局のところ、知識は悪くありません。 編集:私はこの記事に出くわしました:画面をキャプチャするためのさまざまな方法。Windows Media APIの方法とDirectXの方法を紹介しました。結論では、ハードウェアアクセラレーションを無効にすると、キャプチャアプリケーションのパフォーマンスが大幅に向上する可能性があると述べています。これがなぜなのか、私は興味があります。誰かが私のために欠けている空白を埋めることができますか? 編集:Camtasiaなどのスクリーンキャストプログラムは独自のキャプチャドライバーを使用することを読みました。誰かがそれがどのように機能するのか、なぜそれがより速いのかについて私に詳細な説明をくれますか?そのようなものを実装するためのガイダンスも必要かもしれませんが、とにかく既存のドキュメントがあるはずです。 また、FRAPSが画面を記録する方法もわかりました。それは、バックバッファーから読み取るために、基になるグラフィックAPIをフックします。私が理解しているところでは、ビデオRAMではなくシステムRAMから読み取るため、これはフロントバッファーから読み取るよりも高速です。こちらの記事をご覧ください。
159 c++  c  windows 

9
C ++ valarray対vector
私はベクターが大好きです。彼らは気の利いた、速いです。しかし、私はvalarrayと呼ばれるものが存在することを知っています。なぜベクトルではなくvalarrayを使用するのですか?valarrayには構文上の砂糖があることは知っていますが、それ以外の場合、いつ役立つのですか?

13
「コンパイル時に割り当てられるメモリ」とはどういう意味ですか?
CやC ++などのプログラミング言語では、多くの場合、静的および動的なメモリ割り当てを参照します。概念は理解していますが、「コンパイル時にすべてのメモリが割り当てられた(予約された)」というフレーズは常に混乱します。 コンパイルは、私が理解しているように、高レベルのC / C ++コードを機械語に変換し、実行可能ファイルを出力します。コンパイルされたファイルでメモリはどのように「割り当て」られますか?メモリは常にすべての仮想メモリ管理機能を備えたRAMに割り当てられているのではないですか? 定義によるメモリ割り当ては、ランタイムコンセプトではありませんか? C / C ++コードで1KBの静的に割り当てられた変数を作成すると、実行可能ファイルのサイズが同じだけ増加しますか? これは、「静的割り当て」という見出しの下でフレーズが使用されているページの1つです。 基本に戻る:メモリー割り当て、歴史の歩み

2
クラスメンバーのスマートポインターの使用
C ++ 11のクラスメンバーとしてのスマートポインターの使用法を理解できません。私はスマートポインターについて多くを読みましたが、私はどのようにunique_ptr、およびshared_ptr/またはweak_ptr一般的に機能するかを理解していると思います。わからないのは本当の使い方です。誰もunique_ptrがほとんどいつも行く方法として使うことを勧めているようです。しかし、私はこのようなものをどのように実装しますか: class Device { }; class Settings { Device *device; public: Settings(Device *device) { this->device = device; } Device *getDevice() { return device; } }; int main() { Device *device = new Device(); Settings settings(device); // ... Device *myDevice = settings.getDevice(); // do something with myDevice... } ポインタをスマートポインタに置き換えたいとしましょう。のunique_ptrためにA …

12
Qtを使用しているときにコンソールに出力する方法
コンピューターグラフィックスでいくつかのプログラムを作成するためにQt4とC ++を使用しています。デバッグでcoutはなく実行時にいくつかの変数をコンソールに出力できるようにする必要がありますが、ライブラリを追加しても機能しないようです。これを行う方法はありますか?
159 c++  qt  cout 

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