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

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

10
32ビットのループカウンターを64ビットで置き換えると、Intel CPUで_mm_popcnt_u64を使用すると、パフォーマンスが大幅にずれる
popcount大規模なデータ配列への最速の方法を探していました。私が遭遇した非常に奇妙な効果を:からループ変数を変更するunsignedにuint64_t私のPC上で50%で作られたパフォーマンスの低下を。 ベンチマーク #include <iostream> #include <chrono> #include <x86intrin.h> int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr << "usage: array_size in MB" << endl; return -1; } uint64_t size = atol(argv[1])<<20; uint64_t* buffer = new uint64_t[size/8]; char* charbuffer = reinterpret_cast<char*>(buffer); for (unsigned i=0; i<size; …


11
右辺値、左辺値、x値、glvalues、およびprvaluesとは何ですか?
C ++ 03では、式は右辺値または左辺値のいずれかです。 C ++ 11では、式は次のようになります。 右辺値 左辺値 xvalue 輝かしい prvalue 2つのカテゴリが5つのカテゴリになりました。 これらの新しい表現のカテゴリは何ですか? これらの新しいカテゴリは、既存の右辺値および左辺値のカテゴリとどのように関連していますか? C ++ 0xの右辺値と左辺値のカテゴリは、C ++ 03と同じですか? これらの新しいカテゴリが必要なのはなぜですか?されているWG21の神々は、ちょうど私たち単なる人間を混同しようとしていますか?
1356 c++  expression  c++-faq  c++11 

25
C ++で仮想関数が必要なのはなぜですか?
私はC ++を学習していて、仮想関数を取得しています。 私が(本およびオンラインで)読んだことから、仮想関数は基本クラスの関数であり、派生クラスでオーバーライドできます。 しかし、この本の前半で、基本的な継承について学習するときに、を使用せずに派生クラスの基本関数をオーバーライドすることができましたvirtual。 ここで何が欠けているのですか?仮想関数には他にもあることを知っています。それは重要であると思われるので、それが正確に何であるかを明確にしたいと思います。オンラインで正解を見つけることができません。

6
「テンプレート」と「タイプ名」のキーワードをどこに、なぜ配置しなければならないのですか?
テンプレートでは、どこで、なぜ私は配置する必要がありますtypenameし、template依存名に? とにかく依存名は正確には何ですか? 私は次のコードを持っています: template <typename T, typename Tail> // Tail will be a UnionNode too. struct UnionNode : public Tail { // ... template<typename U> struct inUnion { // Q: where to add typename/template here? typedef Tail::inUnion<U> dummy; }; template< > struct inUnion<T> { }; }; template <typename T> // …

20
ローカル変数のメモリにスコープ外でアクセスできますか?
次のコードがあります。 #include <iostream> int * foo() { int a = 5; return &a; } int main() { int* p = foo(); std::cout << *p; *p = 8; std::cout << *p; } そして、コードは実行時例外なしで実行されています! 出力は 58 それはどのようになりますか?ローカル変数のメモリは、その関数の外ではアクセスできませんか?


1
C ++ 17の新機能は何ですか?
ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 C ++ 17の機能が完全になったため、大きな変更が発生する可能性はほとんどありません。何百もの提案がC ++ 17に対して提案されました。 C ++ 17でC ++に追加された機能はどれですか? 「C ++ 1z」をサポートするC ++コンパイラーを使用している場合、コンパイラーがC ++ 17に更新すると、これらの機能のうちどれが使用可能になりますか?
1007 c++  standards  c++-faq  c++17 

5
未定義の動作とシーケンスポイント
「シーケンスポイント」とは何ですか? 未定義の動作とシーケンスポイントの関係は何ですか? a[++i] = i;気分を良くするために、のように面白い複雑な表現をよく使用します。それらの使用をやめるべきなのはなぜですか? これを読んだ場合は、フォローアップの質問Undefined behavior and sequence points reloadedにアクセスしてください。 (注:これは、Stack OverflowのC ++ FAQへのエントリになることを目的としています。このフォームでFAQを提供するという考えを批評したい場合は、これをすべて開始したメタへの投稿がそのための場所になります。回答その質問は、C ++チャットルームで監視されます。ここでは、FAQのアイデアが最初から始まっているため、アイデアを思いついた人があなたの答えを読む可能性が非常に高くなります。



23
変数をswitchステートメントで宣言できないのはなぜですか?
私はいつもこれを疑問に思っていました-なぜswitchステートメントのcaseラベルの後に変数を宣言できないのですか?C ++では、ほとんどどこでも変数を宣言できます(そして、最初の使用に近い変数を宣言することは明らかに良いことです)が、以下はまだ機能しません。 switch (val) { case VAL: // This won't work int newVal = 42; break; case ANOTHER_VAL: ... break; } 上記は私に次のエラー(MSC)を与えます: 「newVal」の初期化は「case」ラベルによってスキップされます これは他の言語でも制限があるようです。なぜこれがそのような問題なのですか?

5
C ++識別子でアンダースコアを使用する場合のルールは何ですか?
C ++では、メンバー変数にローカル変数やパラメーターではなく、メンバー変数であることを示すために、何らかの接頭辞を付けてメンバー変数に名前を付けるのが一般的です。MFCのバックグラウンドを持っている場合は、おそらくを使用しますm_foo。myFooたまに見たこともあります。 C#(またはおそらく.NET)は、のように、アンダースコアのみの使用を推奨しているよう_fooです。これはC ++標準で許可されていますか?

7
C ++ 11の「typedef」と「using」の違いは何ですか?
C ++ 11ではusing、typedefsのような型エイリアスを書き込むために使用できることを知っています。 typedef int MyInt; 私が理解していることから、これは次と同等です: using MyInt = int; そして、その新しい構文は、 " template typedef" を表現する方法を持つための努力から生まれました。 template< class T > using MyType = AnotherType< T, MyAllocatorType >; しかし、最初の2つの非テンプレートの例では、標準に他の微妙な違いがありますか?たとえば、typedefsは「弱い」方法でエイリアシングを行います。つまり、新しいタイプは作成されず、新しい名前のみが作成されます(これらの名前間の変換は暗黙的です)。 それと同じusingですか、それとも新しいタイプを生成しますか?違いはありますか?


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