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

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


22
インラインアセンブリ言語はネイティブC ++コードよりも遅いですか?
インラインアセンブリ言語とC ++コードのパフォーマンスを比較しようとしたので、サイズ2000の2つの配列を100000回追加する関数を作成しました。これがコードです: #define TIMES 100000 void calcuC(int *x,int *y,int length) { for(int i = 0; i < TIMES; i++) { for(int j = 0; j < length; j++) x[j] += y[j]; } } void calcuAsm(int *x,int *y,int lengthOfArray) { __asm { mov edi,TIMES start: mov esi,0 mov ecx,lengthOfArray label: mov …
183 c++  c  performance  assembly 

9
C ++で列挙型を宣言するときにtypedefを使用するのはなぜですか?
私は何年もC ++を書いていないので、今はそれを取り戻そうとしています。それから私はこれに遭遇し、あきらめることを考えました: typedef enum TokenType { blah1 = 0x00000000, blah2 = 0X01000000, blah3 = 0X02000000 } TokenType; これは何ですか?typedefここでキーワードが使用されているのはなぜですか?TokenTypeこの宣言で名前が2回表示されるのはなぜですか?これとセマンティクスはどのように違うのですか? enum TokenType { blah1 = 0x00000000, blah2=0x01000000, blah3=0x02000000 };
183 c++  enums  typedef 

2
なぜ「これ」はポインタであり、参照ではないのですか?
私はこの質問C ++の賛否両論の回答を読んでいて、コメントを読んでいるときにこの疑問を感じました。 プログラマは、「これ」がポインタであり、参照ではないことを混乱させることがよくあります。"hello"がstd :: string型ではないが、char const *(ポインター)に評価される理由は別の混乱です(配列からポインターへの変換後)– Johannes Schaub-litb Dec 22 '08 at 22:56 これは、他の(後の)言語と同じ規則を使用していないことを示しています。– le dorfier 2008年12月22日3:35 私は「これ」のものをかなり些細な問題と呼びます。そして、おっと、私の未定義の動作の例でいくつかのエラーをキャッチしてくれてありがとう。:)私はサイズに関する情報が最初のもので何と関係があるのか​​理解していませんが。ポインターは、割り当てられたメモリの外を指すことは許可されていません。 これは絶え間ないpoinerですか?– yesraaj 2008年12月22日6:35 メソッドがconst int getFoo()constの場合、これは定数にすることができます。<-getFooのスコープでは、「this」は定数なので、読み取り専用です。これにより、バグが防止され、オブジェクトが変更されないことがある程度保証されます。– Doug T. Dec 22 '08 at 16:42 「これ」を再割り当てすることはできません。つまり、これは右辺値であるため、「this =&other;」を実行できません。これはタイプT *であり、タイプT constではありません。つまり、それは非定数ポインターです。constメソッドを使用している場合は、constへのポインタです。T const。しかし、ポインタ自体は非定数です– Johannes Schaub-litb '08 / 12/22 17:53 「this」は次のように考えてください。#define this(this_ + 0)は、コンパイラが「this_」をオブジェクトへのポインタとして作成し、「this」をキーワードにします。(this_ + 0)は右辺値なので、「this」を割り当てることはできません。もちろん、それはそうではありません(そのようなマクロはありません)が、それを理解するのに役立ちます– Johannes …

5
UnicodeはC ++ 11でどの程度サポートされていますか?
C ++ 11がUnicodeをサポートしていることを読んだり聞いたりしました。それに関するいくつかの質問: C ++標準ライブラリはどの程度Unicodeをサポートしていますか? ないstd::string何それが必要ですか? どうやって使うの? 潜在的な問題はどこにありますか?
183 c++  unicode  c++11 

12
C ++に配列の最大長の制限はありますか?
C ++の配列に最大長はありますか? C ++の制限ですか、それとも私のマシンに依存しますか?調整可能ですか?配列の種類に依存しますか? どういうわけかその制限を破ることはできますか、それとも情報を格納するより良い方法を探す必要がありますか?そして、最も簡単な方法は何でしょうか? 私がしなければならないのは、アレイにlong long intを格納することです。私はLinux環境で作業しています。私の質問は、N> 10桁のN long long整数の配列を格納する必要がある場合はどうすればよいですか? 学校用の暗号化アルゴリズム(p-Pollardなど)を作成していて、整数と配列表現の長さのこの壁にぶつかったため、これが必要です。
183 c++  arrays 


11
リバースイテレータで消去を呼び出す方法
私はこのようなことをやろうとしています: for ( std::list< Cursor::Enum >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i ) { if ( *i == pCursor ) { m_CursorStack.erase( i ); break; } } ただし、消去には反復子が必要であり、逆反復子は必要ありません。逆反復子を通常の反復子に変換する方法、またはこの要素をリストから削除する別の方法はありますか?
181 c++ 

25
オブジェクトファイル内の未解決の外部シンボル
Visual Studioでのコーディング中に、未解決の外部シンボルエラーが発生し、どうすればよいかわかりません。何が悪いのかわかりません。解読して頂けますか?どのようなエラーをどこで探すべきですか? 1>Form.obj : error LNK2019: unresolved external symbol "public: class Field * __thiscall Field::addField(class Field *)" (?addField@Field@@QAEPAV1@PAV1@@Z) referenced in function "public: void __thiscall Form::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Form@@QAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>Form.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall Field::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Field@@UAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced …

19
C ++コード/プロジェクトでメモリリークを見つける方法
私はWindowsプラットフォームのC ++プログラマーです。Visual Studio 2008を使用しています。 通常、コードにメモリリークが発生します。 通常、コードを検査することでメモリリークを見つけますが、面倒で、常に良い方法とは限りません。 私は有料のメモリリーク検出ツールを買う余裕がないので、メモリリークを回避するための最善の方法を提案してほしいと思いました。 プログラマがメモリリークを見つける方法を知りたい。 プログラムでメモリリークが発生しないようにするための標準や手順はありますか?
180 c++  memory-leaks 

16
CおよびC ++の静的変数はどこに保存されますか?
実行可能ファイルのどのセグメント(.BSS、.DATA、その他)に静的変数が格納されているため、名前の衝突が発生しませんか?例えば: foo.c: bar.c: static int foo = 1; static int foo = 10; void fooTest() { void barTest() { static int bar = 2; static int bar = 20; foo++; foo++; bar++; bar++; printf("%d,%d", foo, bar); printf("%d, %d", foo, bar); } } 両方のファイルをコンパイルして、fooTest()とbarTestを繰り返し呼び出すメインにリンクすると、printfステートメントは個別に増分します。fooおよびbar変数は翻訳単位に対してローカルであるため、理にかなっています。 しかし、ストレージはどこに割り当てられていますか? 明確にするために、ELF形式でファイルを出力するツールチェーンがあることを前提としています。したがって、これらの静的変数のために実行可能ファイルに予約されたスペースが必要になると思います。 議論のために、GCCツールチェーンを使用すると仮定します。

4
コンピュータプログラムが実行されるとどうなりますか?
私は一般的な理論を知っていますが、詳細に合わせることができません。 プログラムがコンピュータの二次メモリに常駐していることを知っています。プログラムが実行を開始すると、完全にRAMにコピーされます。次に、プロセッサは一度にいくつかの命令(バスのサイズによって異なります)を取得し、それらをレジスターに入れて実行します。 また、コンピュータープログラムは2種類のメモリを使用することも知っています。スタックとヒープは、コンピューターのプライマリメモリの一部でもあります。スタックは非動的メモリに使用され、ヒープは動的メモリに使用されます(たとえば、newC ++の演算子に関連するすべてのもの) 私が理解できないことは、これらの2つのものがどのように関連しているかです。命令の実行にスタックはどの時点で使用されますか?命令は、RAM、スタック、レジスターに行きますか?




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