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

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

6
qDebug、qWarning、qCriticalなどの出力をリダイレクトする方法は?
qDebug() <<デバッグ出力に多くのステートメントを使用しています。シェルスクリプトに頼らずに、そのデバッグ出力をファイルにリダイレクトできるクロスプラットフォームの方法はありますか?私は推測しているオープン()とdup2の()は、 Linuxの中で仕事をするだろうが、それはWindowsでのMinGWでコンパイルした動作しますか? そして多分それをするQtの方法がありますか?
84 c++  debugging  qt  mingw  qdebug 

3
Windowsでは__cdeclまたは__stdcall?
私は現在、DLLとして配布されるWindows用のC ++ライブラリを開発しています。私の目標は、バイナリの相互運用性を最大化することです。より正確には、DLLの関数は、DLLを再コンパイルしなくても、MSVC ++とMinGWの複数のバージョンでコンパイルされたコードから使用できる必要があります。ただし、どの呼び出し規約が最適cdeclか、またはについて混乱していstdcallます。 「コンパイラ間で同じであることが保証されているのはC呼び出し規約だけです」などのステートメントを聞くことがありますcdecl。これは、「の解釈には、特に値を返す方法にいくつかのバリエーションがあります」などのステートメントとは対照的です。これは、特定のライブラリ開発者(libsndfileなど)が配布するDLLでC呼び出し規約を使用することを、目に見える問題なしに阻止するようには見えません。 一方、stdcall呼び出し規約は明確に定義されているようです。私が聞いたところによると、これはWin32とCOMで使用される規則であるため、すべてのWindowsコンパイラは基本的にそれに従う必要があります。これは、Win32 / COMをサポートしていないWindowsコンパイラはあまり役に立たないという仮定に基づいています。フォーラムに投稿された多くのコードスニペットは関数を宣言していますがstdcall、理由を明確に説明する単一の投稿を見つけることができないようです。 矛盾する情報が多すぎて、実行する検索ごとに異なる回答が得られるため、2つを判断するのに役立ちません。なぜどちらかを選択する必要があるのか​​(または2つが同等である理由)について、明確で詳細な議論のある説明を探しています。 ほとんどのクライアントコードは、「インターフェース」、純粋仮想クラス(次のパターンは、例えば説明を通じて、私のDLLとのインタフェースになるので、この質問は、「古典的な」機能に、だけでなく、仮想メンバ関数の呼び出しに適用されるだけでなく、注意こことそこ)。



7
「共有オブジェクトの作成時に `.rodata.str1.8 'に対する再配置R_X86_64_32は使用できません」でコンパイルが失敗する
このソースコードをVPSのメイクファイルからコンパイルしようとしていますが、機能しません。VPSは64セントのOSです これが完全なエラーです # make gcc -c -O3 -w -DLINUX -I../SDK/amx/ ../SDK/amx/*.c g++ -c -O3 -w -DLINUX -I../SDK/amx/ ../SDK/*.cpp g++ -c -O3 -w -DLINUX -I../SDK/amx/ *.cpp g++ -O2 -fshort-wchar -shared -o "TCP_V1.so" *.o /usr/bin/ld: TCP-LINUX_V1.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC …


5
std :: arrayとアレイのパフォーマンス
次のような非常に単純な配列を作成したい場合 int myArray[3] = {1,2,3}; std::array代わりに使用する必要がありますか? std::array<int, 3> a = {{1, 2, 3}}; std :: arrayを通常のものよりも使用する利点は何ですか?それはよりパフォーマンスが良いですか?コピー/アクセスの処理が簡単ですか?
84 c++  c++11  stdarray 

10
整数の1ビットが連続した領域にあるかどうかをテストするためのエレガントで高速な方法はありますか?
ビット値1の位置(32ビット整数の場合は0から31)が連続領域を形成するかどうかをテストする必要があります。例えば: 00111111000000000000000000000000 is contiguous 00111111000000000000000011000000 is not contiguous このテスト、つまりいくつかの関数has_contiguous_one_bits(int)を移植可能にしたいと思います。 明らかな方法の1つは、位置をループして最初のセットビットを見つけ、次に最初の非セットビットを見つけて、それ以上セットビットがないかどうかを確認することです。 もっと速い方法があるのだろうか?最高と最低のセットビットを見つけるための高速な方法がある場合(しかし、この質問から、ポータブルなものはないようです)、可能な実装は次のとおりです。 bool has_contiguous_one_bits(int val) { auto h = highest_set_bit(val); auto l = lowest_set_bit(val); return val == (((1 << (h-l+1))-1)<<l); } 楽しみのために、ここに連続したビットを持つ最初の100個の整数があります: 0 1 2 3 4 6 7 8 12 14 15 16 24 28 30 31 32 48 56 …

9
C ++標準ライブラリにtransform_ifがないのはなぜですか?
構成コピー(1.で実行可能copy_if)を実行したいが、値のコンテナーからそれらの値へのポインターのコンテナー(2.で実行可能transform)を実行したい場合に、ユースケースが出現しました。 利用可能なツールでは、2ステップ未満でそれを行うことはできません: #include <vector> #include <algorithm> using namespace std; struct ha { int i; explicit ha(int a) : i(a) {} }; int main() { vector<ha> v{ ha{1}, ha{7}, ha{1} }; // initial vector // GOAL : make a vector of pointers to elements with i < 2 vector<ha*> ph; // …

5
静的ライブラリ、静的にリンクされたダイナミックライブラリ、動的にリンクされたダイナミックライブラリの.libファイルには何が含まれていますか?
静的ライブラリ、静的にリンクされたダイナミックライブラリ、動的にリンクされたダイナミックライブラリの.libファイルには何が含まれていますか? 動的にリンクされたダイナミックライブラリに.libファイルが必要ないのはなぜですか。また、静的リンクでは、.libファイルはすべてのメソッドを含む.objファイルにすぎません。あれは正しいですか?

9
インクリメントステートメントを除いて、forループ変数をconstにする方法は?
標準のforループについて考えてみましょう。 for (int i = 0; i < 10; ++i) { // do something with i } ループのi本体で変数が変更されないようにしたいfor。 しかし、私は宣言できないiとしてconst、これは、インクリメントステートメント無効になりますよう。ようにする方法がありインクリメント文の変数の外には?iconst



9
C ++のブール値にビット演算子を使用する
C ++の「ブール」値にビット演算子&、|、および^を使用しない理由はありますか? 2つの条件のいずれか1つを真(XOR)にしたい状況に遭遇することがあるので、^演算子を条件式にスローします。また、条件のすべての部分を(短絡ではなく)結果が真であるかどうかを評価したい場合もあるので、&と|を使用します。また、ブール値を累積する必要がある場合もあります。&=と| =は非常に便利です。 これを行うと、眉毛が少し浮き上がりますが、コードはそれ以外の場合よりも意味があり、クリーンです。これらをboolsに使用しない理由はありますか?これに悪い結果をもたらす最新のコンパイラはありますか?

3
非仮想メソッドのオーバーライド
Visual C ++ 2010でこのシナリオを想定しましょう。 #include <iostream> #include <conio.h> using namespace std; class Base { public: int b; void Display() { cout<<"Base: Non-virtual display."<<endl; }; virtual void vDisplay() { cout<<"Base: Virtual display."<<endl; }; }; class Derived : public Base { public: int d; void Display() { cout<<"Derived: Non-virtual display."<<endl; }; virtual …
84 c++  overriding 

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