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

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


12
C ++のchar * vs std :: string [クローズ]
現在のところ、この質問は私たちのQ&A形式には適していません。回答は事実、参考資料、または専門知識によって裏付けられることを期待していますが、この質問は、討論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてガイダンスを入手してください。 7年前に閉鎖されました。 C ++でsの配列を管理するためstd::stringに、いつ使用する必要があり、いつ使用する必要がありますか?char*char char*パフォーマンス(速度)が重要であり、メモリ管理のためにリスクの高いビジネスの一部を受け入れても構わないと思っている場合は、使用する必要があるようです。 考慮すべき他のシナリオはありますか?
81 c++  stl  stdstring  arrays 

4
「intchar」の2つのタイプで変数を宣言する
私はC ++の初心者で、Bjarne Stroustrupのプログラミング:C ++を使用した原則と実践を読んでいます。 3.9.2安全でない変換に関するセクションで、著者は言及しました イニシャライザが整数リテラルの場合、コンパイラは実際の値をチェックし、ナローイングを意味しない値を受け入れることができます。 int char b1 {1000}; // error: narrowing (assuming 8-bit chars) 私はこの宣言に戸惑っています。2つのタイプ(intとchar)を使用します。私はこれまでJavaとSwift(私が比較的よく知っている2つの言語)でそのような宣言を見たことがありません。これはタイプミスですか、それとも有効なC ++構文ですか?

10
C ++でのグローバル定数の定義
いくつかのソースファイルで表示されるようにC ++で定数を定義したいと思います。ヘッダーファイルでそれを定義する次の方法を想像することができます: #define GLOBAL_CONST_VAR 0xFF int GLOBAL_CONST_VAR = 0xFF; 値を取得する関数(例int get_GLOBAL_CONST_VAR()) enum { GLOBAL_CONST_VAR = 0xFF; } const int GLOBAL_CONST_VAR = 0xFF; extern const int GLOBAL_CONST_VAR; そして1つのソースファイルで const int GLOBAL_CONST_VAR = 0xFF; オプション(1)-絶対に使用したいオプションではありません オプション(2)-ヘッダーファイルを使用して各オブジェクトファイルの変数のインスタンスを定義する オプション(3)-ほとんどの場合、IMOは過剰殺害です オプション(4)-列挙型には具体的な型がないため、多くの場合、適切ではない可能性があります(C ++ 0Xは型を定義する可能性を追加します) したがって、ほとんどの場合、(5)と(6)のどちらかを選択する必要があります。私の質問: (5)と(6)のどちらが好きですか? (5)は問題ないのに、(2)は問題ないのはなぜですか?
81 c++ 

8
ldをゴールドに置き換える-経験はありますか?
誰かがgold代わりに使用しようとしましたldか? gold よりもはるかに高速であることが約束されているldため、大規模なC ++アプリケーションのテストサイクルを高速化するのに役立つ可能性がありますが、ldのドロップイン代替として使用できますか? することができますgcc/g++直接呼び出しますかgold。? 既知のバグや問題はありますか? が、goldしばらく以来、GNU binutilsのの一部であり、私は、Webでの「サクセスストーリー」、あるいは「ハウツー」はほとんど認められません。 (更新:ゴールドへのリンクとそれを説明するブログエントリを追加しました)

6
#pragmaが一度自動的に想定されないのはなぜですか?
ファイルを1回だけ含めるようにコンパイラーに指示する意味は何ですか?デフォルトでは意味がありませんか?1つのファイルを複数回含める理由はありますか?なぜそれを仮定しないのですか?それは特定のハードウェアと関係がありますか?
81 c++  c  pragma 


9
std :: mapのキーとしてchar *を使用する
次のコードが機能しない理由を理解しようとしています。これは、キータイプとしてchar *を使用する場合の問題であると想定していますが、どのように解決できるのか、なぜ発生するのかわかりません。私が(HL2 SDKで)使用する他のすべての関数は使用するchar*ので、使用std::stringすると多くの不必要な複雑さが発生します。 std::map<char*, int> g_PlayerNames; int PlayerManager::CreateFakePlayer() { FakePlayer *player = new FakePlayer(); int index = g_FakePlayers.AddToTail(player); bool foundName = false; // Iterate through Player Names and find an Unused one for(std::map<char*,int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); ++it) { if(it->second == NAME_AVAILABLE) { // We found an Available …
81 c++  map  stdmap 

6
オブジェクト指向C ++コード用のCラッパーAPIの開発
私は、既存のC ++ APIをラップアラウンドしてコアロジック(オブジェクト指向C ++で記述)にアクセスする一連のCAPIを開発しようとしています。これは基本的に、C ++ロジックを他の言語で使用できるようにする接着剤APIになります。オブジェクト指向C ++の周りにCをラップすることに関連する概念を紹介するいくつかの良いチュートリアル、本、またはベストプラクティスは何ですか?
81 c++  c  wrapper 

3
「マスクされた」ビットセットのインクリメント
私は現在、次の問題に遭遇したツリー列挙子を作成しているところです。 私はつまり、マスクされたビットセット、セットビットは、マスクのサブセットであり、すなわちビットセット、で探してい0000101たマスクで1010101。私が達成したいのはビットセットをインクリメントすることですが、マスクされたビットに関してのみです。この例では、結果はになります0010000。少し明確にするために、マスクされたビットのみを抽出します。つまり0011、それらをインクリメントして0100マスクビットに再度分配し、を与え0010000ます。 ビットスキャンとプレフィックスマスクの組み合わせを使用して手動で操作を実装する以外に、これを行う効率的な方法を誰かが見ていますか?

3
コードが末尾呼び出しの最適化を積極的に防止しようとするのはなぜですか?
質問のタイトルは少し奇妙かもしれませんが、私が知る限り、末尾呼び出しの最適化に反対するものは何もありません。しかし、オープンソースプロジェクトを閲覧しているときに、コンパイラが末尾呼び出しの最適化を実行するのを積極的に阻止しようとするいくつかの関数にすでに遭遇しました。たとえば、そのようなハックでいっぱいのCFRunLoopRefの実装です。例えば: static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__() __attribute__((noinline)); static void __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__(CFRunLoopObserverCallBack func, CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info) { if (func) { func(observer, activity, info); } getpid(); // thwart tail-call optimization } なぜこれがそれほど重要に見えるのか知りたいのですが、通常の開発者として私もこれを念頭に置いておく必要がある場合はありますか?例えば。末尾呼び出しの最適化に関する一般的な落とし穴はありますか?

15
C ++はintAtomicの読み取りと書き込みですか?
2つのスレッドがあります。1つはintを更新し、もう1つはそれを読み取ります。これは、読み取りと書き込みの順序が関係ない統計値です。 私の質問は、とにかくこのマルチバイト値へのアクセスを同期する必要がありますか?または、別の言い方をすれば、書き込みの一部が完了して中断され、その後読み取りが発生する可能性があります。 たとえば、0x00010000の増分値を取得する値= 0x0000FFFFについて考えてみます。 気になる値が0x0001FFFFのようになる時間はありますか?確かに、タイプが大きいほど、このようなことが起こる可能性が高くなります。 私は常にこれらのタイプのアクセスを同期してきましたが、コミュニティの考えに興味がありました。

8
Visual Studio2010の奇妙な「警告LNK4042」
Visual Studio 2010(C ++)からの重要な警告に、頭を殴られたばかりです(ほとんどありません)。 コンパイルにより、次の出力が得られました。 1 Debug \ is.obj:警告LNK4042:オブジェクトが複数回指定されました。エクストラは無視され ます1Debug \ make.obj:警告LNK4042:オブジェクトが複数回指定されました。エクストラは無視され ます1Debug \ view.obj:警告LNK4042:オブジェクトが複数回指定されました。エクストラは無視され ます1identity.obj :エラーLNK2019 :void __cdecl test::identity::view(void)関数void __cdecl test::identity::identity(void)(?identity @ 0test @@ YAXXZ)で参照される未解決の外部シンボル(?view @ identity @ test @@ YAXXZ)1 identity.obj:エラーLNK2019 :未解決の外部シンボルvoid __cdecl test::identity::make(void)(?make @ identity @ test @@ YAXXZ)関数void __cdecl test::identity::identity(void)(?identity @ 0test @@ YAXXZ)で参照 1 range.obj:エラーLNK2019:void …

11
戻り値の型によるオーバーロード
私はこのトピックについてSOでいくつかの質問を読みましたが、それでも私には混乱しているようです。私はC ++を学び始めたばかりで、テンプレートや演算子のオーバーロードなどについてはまだ勉強していません。 今、過負荷にする簡単な方法があります class My { public: int get(int); char get(int); } テンプレートや奇妙な動作なし?または私はただ class My { public: int get_int(int); char get_char(int); } ?
81 c++  overloading 


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