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

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

5
C ++ 11のstd :: atomic :: compare_exchange_weak()を理解する
bool compare_exchange_weak (T& expected, T val, ..); compare_exchange_weak()C ++ 11で提供される比較交換プリミティブの1つです。それはだ、弱いオブジェクトの値が等しい場合、それは偽さえを返すという意味でexpected。これは、(x86のように1つではなく)一連の命令を使用して実装する一部のプラットフォームでの誤った障害が原因です。このようなプラットフォームでは、コンテキストスイッチ、別のスレッドによる同じアドレス(またはキャッシュライン)のリロードなどにより、プリミティブが失敗する可能性があります。それはだspurious、それが(等しくないオブジェクトの値ではありませんようexpected、操作を失敗しました)。代わりに、それは一種のタイミングの問題です。 しかし、私を困惑させるのは、C ++ 11標準(ISO / IEC 14882)で言われていることです。 29.6.5 ..疑似障害の結果、弱いコンペアアンドスワップのほぼすべての使用がループになります。 ほぼすべての用途でループする必要があるのはなぜですか?それは、誤った失敗のために失敗したときにループすることを意味しますか?もしそうなら、なぜcompare_exchange_weak()私たちは自分たちでループを使用して書くのですか?私たちはcompare_exchange_strong()、私たちのために偽の失敗を取り除くべきだと私が思うものを使うことができます。の一般的な使用例はcompare_exchange_weak()何ですか? 関連する別の質問。彼の著書「C ++ Concurrency In Action」の中で、Anthonyは次のように述べています。 //Because compare_exchange_weak() can fail spuriously, it must typically //be used in a loop: bool expected=false; extern atomic<bool> b; // set somewhere else while(!b.compare_exchange_weak(expected,true) && !expected); //In …

14
C ++で機密性の高い文字列を不明瞭にする手法
C ++アプリケーションに機密情報(秘密にしたい対称暗号化キー)を保存する必要があります。単純なアプローチはこれを行うことです: std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess"; ただし、stringsプロセス(またはバイナリアプリから文字列を抽出するその他のプロセス)を介してアプリケーションを実行すると、上記の文字列が表示されます。 そのような機密データを不明瞭にするためにどのようなテクニックを使用すべきですか? 編集: もちろん、皆さんのほとんどが「実行可能ファイルをリバースエンジニアリングできる」と言っています -もちろんです!これは私のうんざりなので、ここで少し怒らせます。 このサイトのセキュリティ関連のすべての質問の99%(大丈夫なので、少し誇張しているかもしれません)が「完全に安全なプログラムを作成する方法はありません」という急流で回答されているのはなぜですか?これは役に立ちません回答!セキュリティは、一方の端で完全なユーザビリティとセキュリティなしの間の、もう一方の端で完全なセキュリティだがユーザビリティなしの間のスライディングスケールです。 重要なのは、何をしようとしているのか、ソフトウェアが実行される環境に応じて、スライディングスケールでの位置を選択することです。軍事施設用のアプリではなく、自宅のPC用のアプリを作成しています。信頼されていないネットワーク全体で、既知の暗号化キーを使用してデータを暗号化する必要があります。これらの場合、「あいまいさによるセキュリティ」でおそらく十分です。確かに、十分な時間、エネルギー、スキルを備えた誰かがバイナリをリバースエンジニアリングしてパスワードを見つけることができますが、どうでしょうか。私は気にしません: 一流の安全なシステムを実装するのにかかる時間は、クラックされたバージョンによる販売の損失よりも高価です(私が実際にこれを販売しているわけではありませんが、あなたの言うとおりです)。新しいプログラマーの間でのプログラミングにおけるこの青空の「可能な限り絶対的な最善の方法」の傾向は、控えめに言っても馬鹿げています。 この質問に答えてくれてありがとう-彼らは最も役に立ちました。残念ながら、私は1つの回答しか受け入れることができませんが、役立つ回答はすべて賛成票を投じました。

5
「Objective-CはC ++より厳密にCのスーパーセットです」とはどういう意味ですか?
私が読んだところから:なぜObjective-CはAppleコミュニティの外ではあまり人気がないのですか? Objective-CはCのスーパーセット(実際にはC ++よりも厳密)なので、下位互換性の問題は発生しません。Cで実行できることはすべてObjective-Cで実行できます。 スーパーセットであることは、妊娠しているようにバイナリです。Obj-CはCのスーパーセットですが、C ++はそうではありません。 スーパーセットとはどういう意味ですか?どのようにして、objective-CはCにより近い//後方互換性を持つでしょうか?Objective-Cは、C ++よりもCの哲学にどのように準拠していますか? 目的のCコンパイラ(100%互換)を使用して、Cプログラムを変更せずにコンパイルできますか? これは、どちらが優れているかという戦争よりも、プログラミング言語の設計と互換性についての質問です。
87 c++  objective-c  c 

10
なぜprintf(“%f”、0); 未定義の動作を与える?
ステートメント printf("%f\n",0.0f); 0を出力します。 ただし、ステートメント printf("%f\n",0); ランダムな値を出力します。 ある種の未定義の動作を示していることに気づきましたが、具体的にその理由を理解できません。 全てのビットが0である、浮動小数点の値がまだ有効であるfloat0の値を持つ floatとint(つまりも関連している場合)、私のマシン上で同じサイズです。 なぜ浮動小数点リテラルの代わりに整数リテラルを使用すると、printfこの動作が発生するのですか? PS私が使用した場合と同じ動作が見られます int i = 0; printf("%f\n", i);

5
LinuxのGCCでstd :: threadを使用するための正しいリンクオプションは何ですか?
こんにちは私はstd::threadG ++で使用しようとしています。これが私のテストコードです #include <thread> #include <iostream> int main(int, char **){ std::thread tt([](){ std::cout<<"Thread!"<<std::endl; }); tt.join(); } コンパイルされますが、実行しようとすると次のようになります。 terminate called after throwing an instance of 'std::system_error' what(): Operation not permitted Aborted 私のコンパイラバージョン: $ g++ --version g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see …

13
MemcachedをWindows(x64)64ビット環境で実行できますか?
誰もが知っていIF、WHENまたはどのように私は得ることができますMemcachedのWindowsの64ビット環境で実行していますか? 私は新しいホスティングソリューションをセットアップしていて、64ビットOSを実行することを強く望んでいます。これは、SQL ServerDBを備えたASP.NetMVCソリューションであるため、OSはWindows Server 2003または(願わくば!)2008のいずれかになります。 これがサーバー上の32ビットと64ビットに関する議論に波及する可能性があることは知っていますが、私の好みは64ビットであり、いくつかの非常に 正当な理由があるとだけ言っておきましょう。 これまでのところ、私はいくつかのオプションを試し、32ビットマシンでこれを起動することに関連する少しの助けを見つけました(そして私が追加するかもしれませんが成功しました)が、元のWindowsポートはWin32固有であるため、これはほとんど役に立ちませんx64にサービスとしてインストールする場合。また、Win32でコンパイルされたバージョンしか取得できないlibeventにも依存しています。 特に32ビットと64ビットのアーキテクチャの複雑な違いのために、これらすべてをC ++にロードして「コンパイル」(64ビットの場合)を押すだけでは機能しないと思いますが、誰かがこれを取り除くことに取り組んでいるのではないかと思います地面?残念ながら、私の専門知識はマネージコード(C#)のみにあります。それ以外の場合は、これを自分で試してみますが、64ビットWindowsサーバーでmemcachedを実行しようとしているのは私だけだとは信じられません。 ..私ですか? 更新 はい、私はまだこれに対する答えを探しているのではないかと思います-安定したビルドを作成するための(私の哀れなC ++スキルを使った)すべての努力が失敗しました-1台のサーバーと3台のVMをゴミ箱に捨てて、今試してみました本当の専門家に頼ってください。これを64ビットに移植することを計画している人はいますか?それとも、代わりにMS Velocityを使用することを本当に提案していますか?私はその考えに身震いします。 更新:@ Lars-私は実際にEnyimを使用しています-それは非常に良いですが、あなたが言及しているのはサーバー部分ではなくクライアントです。 @ DannySmurf-私はそれをサービスとして32ビットOSにしかインストールできなかった。64ビットOSは、このWin32サービスのインストールを拒否します。もちろん、はい、多くのWin32コードはx64アーキテクチャでシームレスに動作するため、32ビットアプリ(Officeなど)やゲ​​ームをVista / XP 64などで実行できますが、サービスに関しては直接変換されません。私は専門家ではありません。サービスがサブスクライブする必要のある同期やイベントに関係しているのではないかと思います。64と32はうまく機能しないのではないかと思います。私はこれについて訂正できてうれしいですが、あなたの質問に答えるために-はい、私は試しました。 @ OJ-率直な回答をありがとうございました。私は同じように考えましたが、他の誰かが提案を持っているか、またはすでにこのルートを進んでいるかどうかはわかりませんでした。StackOverflowがLIVEの場合、より多くの人が応答して、これが調査中のものであるかどうかを知らせてくれます。自分でコンパイルしてみることができますが、(C ++の経験レベルでは)それを「信頼」することはできません。大規模でスケーラブルなソリューションのこのような重要なコンポーネントで「エンタープライズレベル」の信頼性を提供します。自信を持てるようになるには、消毒されていない実験的アプローチではなく、教育を受けた介入が必要だと思います。私の側の少しの見落としは、サイトをダウンさせる可能性があります。まあ...次回まで。
87 c#  c++  windows  64-bit  memcached 

12
TCHARはまだ関連していますか?
私はWindowsプログラミングに不慣れで、Petzoldの本を読んだ後、次のように思います。 文字列を宣言するためにTCHAR型と_T()関数を使用することはまだ良い習慣ですか、それとも新しいコードでwchar_tとL""文字列を使用する必要があるのですか? Windows 2000以降のみを対象とし、コードは最初からi18nになります。
87 c++  c  windows  unicode  wchar-t 

5
SAFESEHイメージC ++に対してモジュールは安全ではありません
Microsoft Visual Studio 2011 ProfessionalBetaを使用しています cMakeとVisualStudioComplierを使用してコンパイルしたOpenCVC ++ファイル(http://opencv.willowgarage.com/wiki/Welcome)を実行しようとしています。 ただし、プロジェクトをデバッグしようとすると、600以上のエラーが発生します。そのほとんどは次のとおりです。 エラーLNK2026:モジュールはSAFESEHイメージに対して安全ではありません。 どうやらこれらのファイルはopencv_ffmpegプロジェクトにありますが、見つかりませんでした。Microsoftヘルプページのsafeseh Safe Exception Handlersページを確認しましたが、明確な回答は見つかりませんでした。 他の誰かがこの問題を抱えていて、彼らがなんとかそれを修正したかどうか疑問に思いました。

4
std :: stringの最後の要素を取得します
次のように、文字列の最後の文字を取得するための省略形またはよりエレガントな方法があるかどうか疑問に思いました。 char lastChar = myString.at( myString.length() - 1 ); のようなものmyString.back()は存在しないようです。同等のものはありますか?
87 c++  string 

9
void *の正当な使用法はありますか?
void*C ++での正当な使用法はありますか?それとも、Cが持っていたのでこれが導入されましたか? 私の考えを要約するだけです: 入力:複数の入力タイプを許可する場合は、関数とメソッドをオーバーロードできます。あるいは、共通の基本クラスまたはテンプレートを定義することもできます(回答でこれに言及していただきありがとうございます)。どちらの場合も、コードはより記述的でエラーが発生しにくくなります(基本クラスが適切な方法で実装されている場合)。 出力:void*既知の基本クラスから派生したものとは対照的に、受信したい状況は考えられません 。 私が何を意味するのかを明確にするために:私はのユースケースがあるかどうかを具体的に尋ねているのではなく、最良の、または唯一の利用可能な選択肢void*がある場合があるかどうかを尋ねていvoid*ます。これは、以下の何人かの人々によって完全に答えられました。
87 c++ 

8
C ++コードのコールグラフを生成する方法
特定の関数にヒットしている可能性のあるすべての実行パスを見つけるためのコールグラフを生成しようとしています(この関数につながるパスがたくさんあるので、すべてのパスを手動で把握する必要はありません) )。例えば: path 1: A -> B -> C -> D path 2: A -> B -> X -> Y -> D path 3: A -> G -> M -> N -> O -> P -> S -> D ... path n: ... CodevizとDoxygenを試しましたが、どちらの結果もターゲット関数Dの呼び出し先しか表示されません。私の場合、Dはクラスのメンバー関数であり、そのオブジェクトはスマートポインターでラップされます。クライアントは、Dを呼び出すために、常にファクトリを介してスマートポインタオブジェクトを取得します。 誰かがこれを達成する方法を知っていますか?


5
NULLが宣言されていないのはなぜですか?
このコードをコンパイルしようとすると、この構造体コンストラクターに問題があります。 typedef struct Node { Node( int data ) // { this->data = data; previous = NULL; // Compiler indicates here next = NULL; } int data; Node* previous; Node* next; } NODE; 私が来ると、このエラーが発生します: \linkedlist\linkedlist.h||In constructor `Node::Node(int)':| \linkedlist\linkedlist.h|9|error: `NULL' was not declared in this scope| ||=== Build finished: 1 errors, …
87 c++  syntax  nodes 


4
最新のC ++の実験的な機能は、長期的なプロジェクトに対して信頼できますか?
現在C ++ 11/14を使用しているプロジェクトがstd::filesystemありますが、C ++ 17でのみ使用可能なのようなものが必要であるため、現在使用する機会がありません。ただし、現在のコンパイラではstd::experimental::filesystem。として使用できるようです。将来、次のようなものを追加できると仮定して、実験的な機能を使用することをお勧めしますか? #ifdef CXX17 //if this is C++17 std::filesystem::something ...; #else std::experimental::filesystem::something ...; #endif 私の懸念は次のとおりです。 1.すべての準拠コンパイラが同じ実験機能を備えていることが保証されていますか? 2.実験的な機能は、信頼性を低下させる大きな変更が発生する傾向がありますか? たぶん、疑問に思うことがもっとあります。なぜそれらを使用する必要があるのですか、または使用しないのですか?私は新しいプロジェクトに戸惑い、何を決めるのかわかりません。

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