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

静的に型付けされた自由形式のマルチパラダイムでコンパイルされた汎用プログラミング言語であるC ++に関する質問。


2
ミューテックス実装のテストとベンチマークの方法
タイトルにあるように、C ++のmutexのさまざまな実装を適切にテストおよびベンチマークするにはどうすればよいですか? 基本的に、2つのコアarmv7で実行されるプロジェクトのstd :: mutexのようなクラスを作成し、競合しない場合のオーバーヘッドを最小限に抑えました。今、私は上記のミューテックスをより多くの場所と異なるアーキテクチャで使用することを検討していますが、これを行う前に、 それは実際に正しいです 標準のstd :: mutexよりもパフォーマンスが悪い病理学的なケースはありません。 明らかに、いくつかの基本的な単体テストとマイクロベンチマークを書いたので、すべてがうまくいくように見えますが、マルチスレッドコードでは「動作しているように見える」ので、それほど快適ではありません。 それで、確立された静的または動的分析技術はありますか? ミューテックスクラスの単体テストを記述する際の一般的な落とし穴は何ですか? 注目すべき典型的なエッジケースは何ですか? 実装には標準ライブラリタイプのみを使用します。これには、アトミックでの非一貫性のロードおよびストア操作が含まれます。ただし、他の実装にも同じテストハーネスを使用したいので、主に実装に依存しないアドバイスに興味があります。
12 c++  testing  mutex 

5
最終的にデストラクタと概念的な違いは何ですか?
まず、C ++に「最終的に」コンストラクトがない理由をよく知っていますか?しかし、別の質問に関する長期にわたるコメントの議論は、別の質問を正当化するようです。 それを除けば問題から、finallyC#やJavaで基本的に一度だけ存在することができます(== 1)の範囲および単一のスコープあたりが(== n)を複数持つことができますC ++デストラクタ、私は、彼らは基本的に同じものだと思います。(技術的な違いがいくつかあります。) しかし、別のユーザーは次のように主張しました: ...私は、dtorは本質的に(リリースセマティクス)のツールであり、最終的には本質的に(コミットセマンティクス)のツールであると言っていました。理由がわからない場合は、finallyブロックで例外を互いの上にスローするのが正当である理由と、デストラクタが例外でない理由を検討してください。(ある意味、それはデータとコントロールの関係です。デストラクタはデータを解放するためのものであり、最終的にはコントロールを解放するためのものです。それらは異なります。C++がそれらを結び付けるのは残念です。) 誰かがこれを解決できますか?

3
C ++での非オプションポインターと非const参照
では他のC ++の機能、リファレンス引数のGoogleのC ++スタイルガイドでは、私は非const参照は使用してはならないことをお読みください。 参照によって渡されるすべてのパラメーターには、constというラベルを付ける必要があります。 引数として参照を使用する関数呼び出しを見ることは、Cプログラマーにとって完全に混乱することは明らかですが、CとC ++は今では異なる言語です。出力パラメーターが必要な場合、必要な出力パラメーターへのポインターを使用すると、関数本体全体がスキップされる可能性があり、関数の実装がより複雑になります(関数の循環的な複雑さと深さが正式に増加します)。 C ++コードをできるだけ簡単に理解/保守できるようにしたいので、コーディングスタイルガイドを読むことに興味があります。しかし、チームのベストプラクティスを適応させるには、スタイルガイド要素の背後にある理論的根拠を理解することが重要な要素だと思います。 非const参照は本当に悪いですか?それらを禁止するのはGoogle固有のものだけですか、それとも一般に受け入れられているルールですか?出力パラメーターをポインターとして実装するための余分な労力を正当化するものは何ですか?

2
C ++ 11でauto_ptrの廃止の設計変更を処理する方法は?
C ++ 11(つまり-std=c++11)でライブラリをテストしています。ライブラリはauto_ptr次のパターンを使用します: Foo* GetFoo() { autoptr<Foo> ptr(new Foo); // Initialize Foo ptr->Initialize(...); // Now configure remaining attributes ptr->SomeSetting(...); return ptr.release(); } C ++ 11は非推奨auto_ptrになったため、それから離れたいと思います。 ただし、コードはC ++ 03とC ++ 11の両方をサポートしているため、ヤンクするほど単純ではありませんauto_ptr。また、ライブラリに外部依存関係がないことにも言及する価値があります。C ++ 03を使用します。Autotools、Cmake、Boostなどを使用しません... auto_ptrC ++ 03との互換性を維持しながら、C ++ 11 から移行するための設計変更をどのように処理する必要がありますか?
12 design  c++  c++11 

1
複数のプロジェクトを含むCMake(C ++)リポジトリのディレクトリ構成
単一の(git)リポジトリに保存されている一連の関連する独立したC ++プロジェクトの編成に関するアドバイスをお願いします。プロジェクトはCMakeを使用します。 簡単な例として、2つのプロジェクトAとB、Bに依存するAを想定します。Aを開発するほとんどの人は、パッケージングシステムを介してBを取得します。したがって、Aのみをコンパイルします。ただし、開発者がAとBの両方を個別にコンパイル(およびインストール)できるようにする必要があります。 これが提案です: └── Repo1 ├── CMakeLists.txt (1) ├── A │ ├── CMakeLists.txt (2) │ ├── include │ │ ├── aaa.h │ │ ├── aaaa.h │ │ └── CMakeLists.txt (3) │ └── src │ ├── aaa.cpp │ ├── aaaa.cpp │ └── CMakeLists.txt (4) ├── B │ ├── CMakeLists.txt (2) …

4
数学演算子のメンバー関数と非メンバー関数
私は、行列、ベクトルなどを含む線形代数ライブラリ(長い話、学校の課題です)を書いています。このライブラリを作成する過程で、オブジェクトに対して数学演算を実行する関数を作成します。たとえば、行列の転置、行列の反転、ベクトルの正規化など。 この種の関数の「ベストプラクティス」とは何かに興味がありました。つまり、関数をメンバー関数にするか、非メンバーにするべきでしょうか。(わかりやすくするため/ライブラリの使用目的) 例: //Member function way: B = A.transpose(); C = A.inverse(); //Non-member function way: B = linalg::transpose(A); //Non-member transpose function in linear algebra namespace C = linalg::inverse(A); この種の操作に関する標準はありますか?または、少なくとも、これを行う一般的な方法はありますか?私は最初の選択肢に傾いていますが、これが推奨されるかどうか知りたいです。
12 c++  libraries  methods 

3
CおよびC ++プログラムで型をマークするにはどうすればよいですか?
では私のこの答え、私が使用し_t最高の状態で、物議を終了タイプ、の終わりに。これが現在のプロジェクトで使用しているプラ​​クティスです。 typedef struct { int x; int y; } point_t; これはstddef.h、size_tまたはのようなCタイプと一致するように意図されていましたptrdiff_t。しかし、私の質問の特定のコメントによると、_tpostfixはPOSIXのために予約されているようです。代わりに何を使うべき_tですか?または、_tとにかく使用し続ける必要がありますか? この質問は、CとC ++の両方を対象としています。これらの言語の表記規則が異なる場合は、お気軽にお答えください。
12 c++  c  naming 

3
より高いレベルの言語を読みやすいC ++にコンパイルすることは可能ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 C ++は多くの点で優れた言語ですが、特にいくつかのことはIDEなしで書くのが面倒です。VIMユーザーとして、S-Expressionsおよび場合によってはLispのようなマクロを使用してC ++を記述できるようにする高レベル言語にアクセスできれば、非常に興味深いでしょう。何回も。 freenodeで尋ねて、ECLやBiglooなどのコンパイラでLisp-> Cをコンパイルするなど、いくつかのアイデアをテストしましたが、特にきれいなCコードは生成されませんでした。 この問題に関する作業はありますか?

5
思考をC ++からC#に移行する方法
私は経験豊富なC ++開発者であり、言語を非常に詳細に知っており、その特定の機能の一部を集中的に使用しました。また、私はOODの原則とデザインパターンを知っています。私は今C#を学んでいますが、C ++の考え方を取り除くことができないという気持ちを止めることはできません。私はC ++の強みに一生懸命縛り付けたので、いくつかの機能がなければ生きられません。また、C#でそれらの適切な回避策または代替策を見つけることができません。 どのような良いプラクティス、デザインパターン、イディオム C ++の観点から、C#で異なっているあなたは提案することができますか?C#で馬鹿げていない完璧なC ++デザインを取得するにはどうすればよいですか? 具体的には、対処するC#風の良い方法を見つけることができません(最近の例): 確定的なクリーンアップを必要とするリソース(ファイルなど)の有効期間を制御します。これは簡単usingに手に入れることができますが、リソースの所有権が転送されているときに適切に使用する方法[... betwen threads]?C ++では、単に共有ポインタを使用して、適切なタイミングで「ガベージコレクション」を処理します。 特定のジェネリックの関数をオーバーライドすることに常に苦労しています(C ++での部分的なテンプレートの特殊化などが大好きです)。C#でジェネリックプログラミングを行う試みを放棄する必要がありますか?ジェネリックは意図的に制限されている可能性があり、特定の問題領域を除いてジェネリックを使用するのはC#っぽくないですか? マクロのような機能。一般に悪い考えですが、問題の一部の領域では、他の回避策はありません(たとえば、デバッグリリースにのみ送信されるログのように、ステートメントの条件付き評価)。それらを持たないということは、if (condition) {...}定型文を追加する必要があることを意味しますが、副作用を引き起こすという点ではまだ同じではありません。

8
ソフトウェアを書くのは、最初から読んで理解するよりも簡単ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私と私の友人は、昨日、大規模なC ++ソフトウェアを書くことと、それを新規採用者として理解することとの違いについて話し合っていました。 ソフトウェアは一度に1行ずつ実行され、このプロセスは私たち(人間)が物事を学び、別の物の上に物事を構築する方法に似ているので、大きなソフトウェアを書くことは実際にそれを読んでそれが何をするかを理解するよりも簡単です(コードをステップスルーすると役立ちますが、複数のクラス/ソースファイルを一緒に覚えておく必要があります。それらが何のために書かれているのかさえ知らない、マルチスレッドコードは悪意のあるポイントを追加します)? これは最初は奇妙に聞こえますが、少し考えた後、合理的であるように見えました

4
LinuxでIntel C / C ++コンパイラを使用して、Windowsでリンクされるオブジェクトファイルを作成することは可能ですか?
どうして? ソースにもよりますが、Intelコンパイラは、x86アーキテクチャ用の最速の実行可能ファイルを生成するコンパイラである可能性が最も高いです(5〜100%の実行時間の改善)。 IntelはLinux向けのコンパイラを非商用ライセンスで無料で提供しています(Intel-Non-Commercial Software Developmentのページのどこかで無料だと思います)。学生向けの無料の非商用ライセンスもありますが、3つの主要なオペレーティングシステムすべてにツールが提供されていますが、このライセンスは適用されません(評判の制限によりリンクが削除されました)。 ゴール 私(非学生として)は、非商用ライセンスの下でインテルコンパイラを使用して実行速度を向上させ、Windows(および場合によってはOSバツ) 詳細: このドキュメントから推測したことは、Intelコンパイラはプラットフォームの主要なコンパイラと互換性のあるオブジェクトファイルを作成するということです。 サブ質問: WindowsおよびLinux(現在のバージョン)のgcc、g ++、cl、mingw32、icc、icpc、iclのオブジェクトファイル形式は何ですか? mingw32クロスコンパイラツールチェーンの一部を使用して目標を達成できますか? 生成されたオブジェクトファイルのメタデータが主な問題だと思いますか? ad 2: mingw32-objcopyは、Linux(おそらくELF)上のIntelコンパイラ出力をMicrosoft互換のCOFFに変換できるようです(ただし、再配置可能なオブジェクトファイルの例外があります)。誰かがこれが実際に機能することを確認できますか(重要でないアプリケーションの場合)、お願いします。

6
オブジェクト指向デザイン、トーナルハーモニーのモデリング方法
コード、音階、ハーモニーを分析するプログラムをC ++ 11で書き始めました。私が設計段階で抱えている最大の問題は、音「C」が音、コードのタイプ(Cmaj、Cmin、C7など)、およびキーのタイプ(Cmajor、Cminorのキー)であることです。間隔(マイナー3、メジャー3)でも同じ問題が発生します。 私は、プログラム内のすべての「シンボル」の基本クラスである基本クラスであるトークンを使用しています。例えば: class Token { public: typedef shared_ptr<Token> pointer_type; Token() {} virtual ~Token() {} }; class Command : public Token { public: Command() {} pointer_type execute(); } class Note : public Token; class Triad : public Token; class MajorTriad : public Triad; // CMajorTriad, etc class Key : …

2
シミュレーションおよびモデリング用のFP
シミュレーション/モデリングプロジェクトを開始しようとしています。OOPがこの種のプロジェクトに使用されていることは既に知っています。しかし、Haskellを勉強することで、コンポーネントのシステムのモデリングにFPパラダイムを使用することを検討しました。詳しく説明します。 データセット(温度や圧力、PDE、境界条件などのパラメーター)で特徴付けられるタイプAのコンポーネントと、異なるデータセット(異なるまたは同じパラメーター、異なるPDEおよび境界条件)。また、各コンポーネントに適用される関数/メソッドが同じであると仮定しましょう(たとえば、Galerkinメソッド)。オブジェクトの可変状態は、定数でないパラメーターに使用されます。 OOPアプローチを使用する場合、各タイプのデータをカプセル化する2つのオブジェクト、PDEを解決するメソッド(ここではコードの再利用に継承が使用されます)、およびPDEのソリューションを作成します。 一方、FPアプローチを使用する場合、各コンポーネントは、PDEのソリューションを取得するためにデータパーツとデータに作用する関数に分割されます。非定数パラメーターは、他の何かの関数として渡されるか(たとえば、時間)、ある種の可変性(可変性のエミュレーションなど)で表現されます。 結論として、FPアプローチの実装は、OOPアプローチと比較して、実際にはシンプルで管理しやすい(pdeを解決するために異なるタイプのコンポーネントまたは新しいメソッドを追加する)でしょうか? 私はC ++ / Fortranのバックグラウンドを持っていますが、プロのプログラマーではないので、間違いがあれば修正してください。

2
C ++ライブラリAPIの設計
C ++ライブラリの優れたAPIデザインについて学び、共有オブジェクト/ dllなどを調べるための優れたリソースを探しています。ソースレベルでの優れたAPI、優れたクラス、テンプレートなどの記述に関する多くのリソースがありますが、共有ライブラリと実行可能ファイルに物事をまとめる。John LakosのLarge-Scale C ++ Software Designのような本は興味深いものですが、非常に時代遅れです。 私が探しているのは、テンプレートの取り扱いに関するアドバイスです。APIのテンプレートでは、実行可能ファイル(または他のライブラリ)にライブラリコードが含まれることが多いため、そこでバグを修正すると、新しいライブラリを単純に展開することはできませんが、そのコードのすべてのクライアントを再コンパイルして再配布する必要があります。(そして、はい、少なくともライブラリ内の最も一般的なバージョンをインスタンス化するなどのいくつかのソリューションを知っています。) また、C ++ライブラリでの作業中にバイナリ互換性を維持するために注意すべき他の注意事項や事柄も探しています。 そのようなことに関する良いウェブサイトや本はありますか?

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