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

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



9
C ++ヘッダーでの「名前空間の使用」
すべてのc ++コースでは、すべての教師が常にsのusing namespace std;直後にファイルを配置#includeしてい.hます。そのヘッダーを別のプログラムに含めることにより、おそらくそれを実現、意図、または希望せずに名前空間をプログラムにインポートすることになるので、これは危険に思えます(ヘッダーの組み込みは非常に深くネストされる可能性があります)。 だから私の質問は二重です:using namespaceヘッダーファイルで使用してはいけないことは正しいのでしょうか? //header.h using namespace std { . . . } 同じラインに沿ってもう一つ質問:万一のヘッダーファイル#includeすべてのヘッダーそれが対応だと.cppファイルのニーズを、のみヘッダー定義のために必要であるとしましょう.cppファイル#include休息、またはそれとして必要なしと宣言すべてをextern? 質問の背後にある理由は上記と同じ.hです。 また、私が正しい場合、これはよくある間違いですか?実際のプログラミングとそこにある「実際の」プロジェクトのことです。 ありがとうございました。

20
C ++列挙型を文字列に簡単にマップする方法
私が使用しているいくつかのライブラリヘッダーファイルに一連の列挙型があり、列挙値をユーザー文字列に、またはその逆に変換する方法が必要です。 「ユーザー文字列」は列挙よりも読みやすくする必要があるため、RTTIはそれを行いません。 ブルートフォースソリューションはこのような関数の束になるでしょうが、私はそれが少しCに似すぎていると感じています。 enum MyEnum {VAL1, VAL2,VAL3}; String getStringFromEnum(MyEnum e) { switch e { case VAL1: return "Value 1"; case VAL2: return "Value 2"; case VAL1: return "Value 3"; default: throw Exception("Bad MyEnum"); } } テンプレートを使用したエレガントな解決策があると直感しますが、それでもまだ頭が十分ではありません。 更新:提案をありがとう-列挙型がサードパーティのライブラリヘッダーで定義されていることを明確にすべきだったので、列挙型の定義を変更する必要はありません。 今の私の直感は、テンプレートを避けて次のようなことをすることです: char * MyGetValue(int v, char *tmp); // implementation is trivial #define ENUM_MAP(type, …
119 c++  templates  enums 


1
テンプレートクラス内のテンプレート関数
私はこのコードを持っています: template <class T> class MyClass { public: template <class U> void foo() { U a; a.invoke(); } }; この形でそれが欲しい: template <class T> class MyClass { public: template <class U> void foo(); }; template <class T> /* ????? */ void MyClass<T>::foo() { U a; a.invoke(); } これを行うにはどうすればよいですか?正しい構文は何ですか?
119 c++  templates 

7
Linux上のWindows用にgcc / g ++でコンパイルする方法は?
Linuxでfreeglutを使用してC ++(g ++)でいくつかの効果を記述し、それらを g++ -Wall -lglut part8.cpp -o part8 それで、g ++が必要なすべてを含む静的にコンパイルされたWindows実行可能ファイルを作成できるかどうか疑問に思っていましたか? 私はWindowsを持っていないので、もしLinuxでそれができたら本当に素晴らしいです:)
119 c++  opengl  gcc  glut  freeglut 

1
CMAKEで-fPICコンパイラオプションを追加する慣用的な方法は何ですか?
私はこれを行うために少なくとも3つの方法に出くわしており、どちらが慣用的な方法であるか疑問に思っています。これは、静的ライブラリに対してほぼ普遍的に行う必要があります。CMakeのMakefileジェネレーターがこれを静的ライブラリーに自動的に追加しないことに驚いています。(私が何かを逃していない限り?) target_compile_options(myLib PRIVATE -fPIC) add_compile_options(-fPIC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic") 他にもバリエーションがあると思います。(もし見つけたら私の質問を編集してください) この質問への答えを知っている場合、CMakeLists.txtファイルを変更せずに、サードパーティのCMakeプロジェクトをこのフラグでコンパイルする方法があるかどうかもわかりますか?そのフラグがない静的ライブラリに出くわしました。静的ライブラリを動的ライブラリにコンパイルするときに問題が発生します。 あなたが得る: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
119 c++  c  cmake 

30
4つのブール値がいくつかのケースに一致するかどうかをチェックするロジックを改善する方法
私には4つのbool値があります。 bool bValue1; bool bValue2; bool bValue3; bool bValue4; 許容値は次のとおりです。 Scenario 1 | Scenario 2 | Scenario 3 bValue1: true | true | true bValue2: true | true | false bValue3: true | true | false bValue4: true | false | false したがって、たとえば、このシナリオは受け入れられません。 bValue1: false bValue2: true bValue3: true bValue4: …
118 c++  if-statement 


6
stdinがターミナルかパイプかを検出しますか?
python引数なしでターミナルから" " を実行すると、Pythonインタラクティブシェルが表示されます。 cat | python端末から" " を実行すると、インタラクティブモードが起動しません。どういうわけか、何も入力せずに、パイプに接続されていることを検出しました。 CまたはC ++またはQtで同様の検出を行うにはどうすればよいですか?
118 c++  c  qt  pipe  stdin 

9
メモリリークはどこまで行くことができますか?
メモリリークに何度も遭遇しました。通常、私はmalloc明日がないようなとき、またはFILE *汚れた洗濯物のようにぶら下がっているとき。私は通常、少なくともプログラムが終了したときにすべてのメモリがクリーンアップされると想定しています(読む:必死に願っています)。プログラムの終了時やクラッシュ時に、リークされたメモリが収集されない状況はありますか? 答えが言語によって大きく異なる場合は、C(++)に焦点を当てましょう。 「明日がないような」、「汚れた洗濯物のようにぶら下がっている」などの語句の双曲線の使用に注意してください。安全ではない* malloc*あなたが愛する人を傷つける可能性があります。また、汚れた洗濯にはご注意ください。
118 c++  c  memory  memory-leaks 

9
8ビット整数から8ビットより大きい値を取得するにはどうすればよいですか?
この小さな宝石の後ろに隠れている非常に厄介なバグを見つけました。C ++仕様によると、符号付きオーバーフローは未定義の動作ですが、値がbit-widthに拡張されたときにオーバーフローが発生した場合のみsizeof(int)です。私が理解しているように、のインクリメントは、でcharある限り、未定義の動作であってはなりませんsizeof(char) < sizeof(int)。しかし、それはどのようcにして不可能な価値を得ているのかを説明していません。8ビット整数として、cそのビット幅より大きい値をどのように保持できますか? コード // Compiled with gcc-4.7.2 #include <cstdio> #include <stdint.h> #include <climits> int main() { int8_t c = 0; printf("SCHAR_MIN: %i\n", SCHAR_MIN); printf("SCHAR_MAX: %i\n", SCHAR_MAX); for (int32_t i = 0; i <= 300; i++) printf("c: %i\n", c--); printf("c: %i\n", c); return 0; } 出力 SCHAR_MIN: -128 SCHAR_MAX: …

5
「is_base_of」はどのように機能しますか?
次のコードはどのように機能しますか? typedef char (&yes)[1]; typedef char (&no)[2]; template <typename B, typename D> struct Host { operator B*() const; operator D*(); }; template <typename B, typename D> struct is_base_of { template <typename T> static yes check(D*, T); static no check(B*, int); static const bool value = sizeof(check(Host<B,D>(), int())) == sizeof(yes); }; …

8
GCCが分岐予測を常に特定の方法で実行するように強制するコンパイラヒントはありますか?
Intelアーキテクチャの場合、GCCコンパイラに、コード内の特定の方法で常に分岐予測を強制するコードを生成するように指示する方法はありますか?Intelハードウェアはこれをサポートしていますか?他のコンパイラやハードウェアはどうですか? 私はこれをC ++コードで使用します。高速で実行したい場合がわかっており、他の分岐が最近必要になった場合でも、他の分岐を取得する必要があるときにスローダウンを気にしません。 for (;;) { if (normal) { // How to tell compiler to always branch predict true value? doSomethingNormal(); } else { exceptionalCase(); } } Evdzhan Mustafaの質問に続くように、ヒントは、プロセッサが命令に初めて遭遇したときにヒントを指定するだけでよく、その後のすべての分岐予測は正常に機能しますか?

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