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

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

9
Mac用C ++ IDE [終了]
現在のところ、この質問はQ&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 Visual Studioを使用してC ++コースを教えています。私の生徒の1人はMacを持っていて、自分のマシンで使用するIDEを探していました。何がお勧めですか?
120 c++  macos  ide 

4
メンバーコンストラクターとデストラクタコールの順序
ああC ++の教祖、私はあなたの知恵を求めています。私に標準語を話し、C ++が次のプログラムを保証するかどうかを教えてください: #include <iostream> using namespace std; struct A { A() { cout << "A::A" << endl; } ~A() { cout << "A::~" << endl; } }; struct B { B() { cout << "B::B" << endl; } ~B() { cout << "B::~" << endl; } }; struct C …
120 c++ 

2
std :: tieはどのように機能しますか?
std::tieあまり考えずに使ってきました。それは機能するので、私はちょうどそれを受け入れました: auto test() { int a, b; std::tie(a, b) = std::make_tuple(2, 3); // a is now 2, b is now 3 return a + b; // 5 } しかし、この黒魔術はどのように機能するのでしょうか?どのように一時的により作成さんstd::tieの変化aとb?これは言語機能ではなくライブラリ機能であるため、私はこれをもっと興味深いものにしています。
120 c++  c++11  tuples 

7
intとfloorにキャストする
これらの間に違いはありますか? float foo1 = (int)(bar / 3.0); float foo2 = floor(bar / 3.0); 私が理解しているように、どちらの場合も同じ結果になります。コンパイルされたコードに違いはありますか?
120 c++  c  floating-point 

8
ヘッダーにC ++インライン関数があるのはなぜですか?
注:これは、インライン関数の使用方法や機能についての問題ではなく、なぜそれらが現在の方法で行われるのかということです。 クラスメンバー関数の宣言では、関数をとして定義する必要はありませんinline。関数の実際の実装のみです。たとえば、ヘッダーファイルでは次のようになります。 struct foo{ void bar(); // no need to define this as inline } なぜクラスのインライン実装では機能しない持っているヘッダファイルにしますか?インライン関数を.cppファイルに配置できないのはなぜですか?インライン定義を.cppファイルに入れようとすると、次の行に沿ってエラーが発生します。 error LNK2019: unresolved external symbol "public: void __thiscall foo::bar(void)" (?bar@foo@@QAEXXZ) referenced in function _main 1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe : fatal error LNK1120: 1 unresolved externals

4
C ++での余分な修飾エラー
次のように定義されたメンバー関数があります。 Value JSONDeserializer::ParseValue(TDR type, const json_string& valueString); ソースをコンパイルすると、次のようになります。 エラー:メンバー 'ParseValue'の追加の修飾 'JSONDeserializer ::' これは何ですか?このエラーを削除するにはどうすればよいですか?
120 c++  g++  compiler-errors 

13
CまたはC ++でのコールスタックの出力
特定の関数が呼び出されるたびに、CまたはC ++で実行中のプロセスのコールスタックをダンプする方法はありますか?私が考えているのは次のようなものです: void foo() { print_stack_trace(); // foo's body return } where はPerl print_stack_traceと同様に機能callerします。 またはこのようなもの: int main (void) { // will print out debug info every time foo() is called register_stack_trace_function(foo); // etc... } where は、呼び出さregister_stack_trace_functionれたときにスタックトレースが出力されるようにする内部ブレークポイントを配置しますfoo。 このようなものはいくつかの標準Cライブラリに存在しますか? LinuxでGCCを使用しています。 バックグラウンド この動作に影響しないはずのコマンドラインスイッチに基づいて異なる動作をするテスト実行があります。私のコードには、これらのスイッチに基づいて異なる方法で呼び出されていると想定する疑似乱数ジェネレーターがあります。スイッチの各セットを使用してテストを実行し、乱数ジェネレーターの呼び出しがスイッチごとに異なるかどうかを確認したいのですが。
120 c++  c  linux  callstack 

22
設定されている最下位ビットの位置
整数に設定されている最下位ビットの位置を決定する効率的な方法を探しています。たとえば、0x0FF0の場合は4になります。 簡単な実装は次のとおりです。 unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value & 1)) { value >>= 1; ++pos; } return pos; } それからいくつかのサイクルを絞る方法はありますか? (注:この質問は、そのようなことを楽しむ人のためのものであり、xyzoptimizationは悪だと言われるためのものではありません。) [編集] アイデアをありがとう!他にもいくつかのことを学びました。涼しい!


3
polymorphic_allocator:いつ、なぜ私はそれを使うべきですか?
ここでは上のドキュメントですcppreferenceは、ここでのワーキングドラフトです。 私は、本当の目的が何でpolymorphic_allocator、いつ/なぜ/どのように使用すべきかを理解していなかったことを認めなければなりません。 例として、にpmr::vectorは次の署名があります。 namespace pmr { template <class T> using vector = std::vector<T, polymorphic_allocator<T>>; } polymorphic_allocatorオファーは何ですか?std::pmr::vector昔ながらのものに関して同様にオファーは何std::vectorですか?今までできなかったことが、どうしたらいいですか? そのアロケータの本当の目的は何ですか、いつ実際に使用する必要がありますか?
120 c++  allocator  c++17 

30
C ++パフォーマンスとJava / C#
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 私の理解では、C / C ++は特定のマシンアーキテクチャで実行するネイティブコードを生成します。逆に、JavaやC#などの言語は、ネイティブアーキテクチャを抽象化する仮想マシン上で実行されます。この中間ステップのため、JavaまたはC#がC ++の速度に一致することは論理的に不可能であるように見えますが、最新のコンパイラー(「ホットスポット」)はこの速度に達するか、それを超えることさえあると言われています。 おそらく、これは言語の問題よりもコンパイラの問題のほうが多いですが、これらの仮想マシン言語の1つがネイティブ言語よりも優れたパフォーマンスを発揮する方法を誰でも簡単に英語で説明できますか?
119 c#  java  c++  performance  bytecode 



3
テンプレートでインラインキーワードを使用しても意味がありますか?
テンプレートはヘッダー内で定義されており、コンパイラーは関数のインライン化が有利であるかどうかを判断できるので、意味がありますか?最近のコンパイラーは関数をインライン化するタイミングをよく知っており、inlineヒントを無視していると聞きました。 編集:両方の回答を受け入れたいのですが、これは不可能です。問題を解決するために、私はフレネルの回答を受け入れています。ほとんどの票を獲得し、彼は正式に正しいからですが、コメントで述べたように、私は別の観点から、パピーとコンポーネント10の回答も正しいものと見なします。 問題はC ++のセマンティクスにあり、inlineキーワードとインライン化の場合は厳密ではありません。phresnelは「それを意味する場合はインラインで書き込む」と言いますが、実際の意味inlineは、元の意味から、パピーが言うように「コンパイラーがODR違反について噛み付くことを停止する」というディレクティブに発展したため、明確ではありません。
119 c++  templates  inline 

5
カンマ付きの三項演算子が真の場合に1つの式しか評価しないのはなぜですか?
私は現在、C ++ Primerという本を使ってC ++を学んでいます。本の演習の1つは次のとおりです。 次の式の意味を説明してください。 someValue ? ++x, ++y : --x, --y 私たちは何を知っていますか?三項演算子はコンマ演算子よりも優先順位が高いことがわかっています。2項演算子を使用すると、これは非常に簡単に理解できましたが、3項演算子を使用すると、少し苦労します。二項演算子で「優先順位が高い」とは、式の前後に優先順位の高い括弧を使用できることを意味し、実行は変更されません。 三項演算子の場合は、次のようにします。 (someValue ? ++x, ++y : --x, --y) コンパイラーがコードをグループ化する方法を理解するのに私を助けない同じコードを効果的にもたらします。 ただし、C ++コンパイラでのテストから、式がコンパイル:されることがわかり、演算子自体が何を表すことができるかわかりません。したがって、コンパイラーは三項演算子を正しく解釈するようです。 次に、2つの方法でプログラムを実行しました。 #include <iostream> int main() { bool someValue = true; int x = 10, y = 10; someValue ? ++x, ++y : --x, --y; std::cout << …

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