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

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

21
nullポインタにアドレス0が使用されるのはなぜですか?
C(またはそのことについてはC ++)では、値がゼロの場合、ポインターは特別です。メモリーを解放した後、ポインターをゼロに設定することをお勧めします。mallocを呼び出すと、メモリを取得できない場合は値0のポインタが返されます。私はif (p != 0)常に、渡されたポインタが有効であることなどを確認するために使用しています。 しかし、メモリアドレス指定は0から始まるので、0は他のアドレスと同じように有効なアドレスではありませんか?その場合、nullポインターの処理に0をどのように使用できますか?代わりに負の数がnullにならないのはなぜですか? 編集: 良い答えがたくさん。私の心がそれを解釈しているように表現された答えで言われたことを要約し、私が誤解した場合、コミュニティが私を修正してくれることを願っています。 プログラミングの他のすべてのように、それは抽象化です。単なる定数であり、実際にはアドレス0に関連していません。C++ 0xは、キーワードを追加することでこれを強調していnullptrます。 これはアドレスの抽象化でもありません。C標準で指定されている定数であり、コンパイラが「実際の」アドレスと決して等しくないことを確認する限り、他の数値に変換できます。0がプラットフォームに使用するのに最適な値。 初期の場合のように抽象化されていない場合、アドレス0はシステムによって使用され、プログラマーの立ち入りを制限します。 私の負の数の提案は少しワイルドなブレーンストーミングだったと私は認めます。アドレスに符号付き整数を使用することは、ヌルポインター(-1など)を除いて、値空間が有効なアドレスを作る正の整数と無駄になる負の数に均等に分割されることを意味する場合、少し無駄です。 いずれかの数値が常にデータ型で表現できる場合、それは0です(おそらく1もそうです。符号なしの場合は0または1になる1ビット整数、または符号付きの場合は単に符号付きビット、または[-2、1]になります。ただし、0がnullで、1がメモリ内の唯一のアクセス可能なバイトであることを確認できます。) それでも未だに未解決な部分があります。スタックオーバーフローの質問特定の固定アドレスへのポインターは、nullポインターの0が抽象化であっても、他のポインター値は必ずしもそうではないことを示しています。これにより、別のスタックオーバーフローの質問を投稿するようになりました。アドレス0にアクセスできますか?。
121 c++  c  memory  pointers 

3
C / C ++マクロ文字列連結
#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2 STR3 == "s1"を連結することは可能ですか?これを行うには、argsを別のマクロ関数に渡します。しかし、直接的な方法はありますか?
121 c++  c  c-preprocessor 

6
2つの文字列リテラルを連結する
KoenigによるAccelerated C ++を読んでいます。彼は、「新しい考え方は、+を使用して文字列と文字列リテラルを連結できる、つまり、2つの文字列(2つの文字列リテラルではない)を連結できるということです。 結構、これは私が思うに理にかなっています。次に、これを明らかにするための2つの個別の演習に移ります。 次の定義は有効ですか? const string hello = "Hello"; const string message = hello + ",world" + "!"; 今、私は上記を実行しようとしましたが、うまくいきました!嬉しかったです。 それから私は次の練習をしようとしました。 const string exclam = "!"; const string message = "Hello" + ",world" + exclam; これは機能しませんでした。これで、2つの文字列リテラルを連結できないという事実と関係があることを理解していますが、なぜ最初の例を機能させたのか( "、world"と "!"ではない)の意味上の違いは理解できません。 "2つの文字列リテラル?これはうまくいかなかったのではないでしょうか?)しかし2つ目はうまくいきませんでした。

4
テンプレート<unsigned int N>はどういう意味ですか?
テンプレートを宣言するとき、次のようなコードに慣れています。 template &lt;class T&gt; しかし、この質問では、彼らは以下を使用しました: template &lt;unsigned int N&gt; コンパイルできることを確認しました。しかし、それはどういう意味ですか?非型パラメーターですか?もしそうなら、どのようにして型パラメーターのないテンプレートを作成できますか?
121 c++  templates 

5
C ++ 11がC99として指定された初期化リストをサポートしないのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する 考慮してください: struct Person { int height; int weight; int age; }; int main() { Person p { .age = 18 }; } 上記のコードはC99では合法ですが、C ++ 11では合法ではありません。 何でしたか c ++ 11 そのような便利な機能のサポートを除外するための標準委員会の理論的根拠?
121 c++  c  c++11  initialization  c99 

2
演算子のオーバーロード:メンバー関数と非メンバー関数?
メンバー関数として宣言されたオーバーロードされた演算子は非対称であると読みましたthis。これは、パラメーターを1つしか持つことができず、自動的に渡される他のパラメーターがポインターであるためです。したがって、それらを比較する基準はありません。一方、オーバーロード演算子はとして宣言されfriendている対称我々は、同じタイプの2つの引数を渡し、したがって、それらを比較することができるからです。 私の質問は、ポインターの左辺値を参照と比較できるのに、なぜ友達が好まれるのですか?(非対称バージョンを使用すると、対称バージョンと同じ結果が得られます)なぜSTLアルゴリズムは対称バージョンのみを使用するのですか?


6
エラー:削除された関数の使用
私は友人が書いたいくつかのC ++コードに取り組んでいて、gcc4.6でコンパイルしたときにこれまでに見たことのない次のエラーが発生します。 error: use of deleted function ‘GameFSM_&lt;std::array&lt;C, 2ul&gt; &gt;::hdealt::hdealt()’ is implicitly deleted because the default definition would be ill-formed: uninitialized non-static const member ‘const h_t FlopPokerGameFSM_&lt;std::array&lt;C, 2ul&gt; &gt;::hdealt::h’ 編集:これは、boost MSM:Boost Webpageを使用するコードの一部から来ています Edit2:ソースコードの= delete()どこにも使用されていません。 一般的に、このエラーはどういう意味ですか?このタイプのエラーが発生した場合、何を探す必要がありますか?


6
C ++で短いリテラルを書き込むにはどうすればよいですか?
非常に基本的な質問:shortC ++でリテラルをどのように書くのですか? 私は次のことを知っています: 2 は int 2U は unsigned int 2L です long 2LL です long long 2.0f です float 2.0 です double '\2'ですchar。 しかし、私はどのようにshortリテラルを書くのでしょうか?私は試しまし2Sたが、コンパイラの警告が表示されます。
120 c++  literals 

2
nullインスタンスでメンバー関数を呼び出すと、未定義の動作が発生するのはいつですか?
次のコードを検討してください。 #include &lt;iostream&gt; struct foo { // (a): void bar() { std::cout &lt;&lt; "gman was here" &lt;&lt; std::endl; } // (b): void baz() { x = 5; } int x; }; int main() { foo* f = 0; f-&gt;bar(); // (a) f-&gt;baz(); // (b) } nullポインターに(b)対応するメンバーがないため、クラッシュすることが予想されxます。実際に(a)は、thisポインタは使用されないため、クラッシュしません。 ので(b)逆参照thisポインタ((*this).x = 5;)、およびthisnullであるヌルを逆参照することは、常に未定義の動作と言われているように、プログラムは、未定義の動作に入ります。 (a)未定義の動作につながりますか?両方の関数(およびx)が静的である場合はどうなりますか?

9
C ++のintとlongの違いは何ですか?
私が間違っていたら訂正してください intは4バイトで、値の範囲は-2,147,483,648〜2,147,483,647(2 ^ 31)です。 長さは4バイトで、値の範囲は-2,147,483,648〜2,147,483,647(2 ^ 31)です。 C ++の違いは何ですか?それらは交換可能に使用できますか?
120 c++  variables 


11
float値をテンプレートパラメータとして使用できないのはなぜですか?
floatテンプレートパラメータとして使用しようとすると、コンパイラはこのコードを要求しますが、int正常に動作します。 floatテンプレートパラメーターとして使用できないからでしょうか? #include&lt;iostream&gt; using namespace std; template &lt;class T, T defaultValue&gt; class GenericClass { private: T value; public: GenericClass() { value = defaultValue; } T returnVal() { return value; } }; int main() { GenericClass &lt;int, 10&gt; gcInteger; GenericClass &lt; float, 4.6f&gt; gcFlaot; cout &lt;&lt; "\n sum of integer is …

2
データ構造が「侵入的」であるとはどういう意味ですか?
リストやスタックなどのデータ構造を説明するために侵入型という用語を使用したことがありますが、それはどういう意味ですか? 侵入型データ構造のコード例を教えてください。侵入型データ構造との違いはありますか? また、なぜそれを邪魔にならない(または邪魔にならない)のですか?メリットは何ですか?欠点は何ですか?

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