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

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

1
LLVMを介してC ++アプリケーションからJavaへのポートを作成することは実行可能ですか
LLVMを使用してC ++アプリケーションをJavaバイトコードに移植することは、どの程度実行可能ですか(おそらくLLJVM)。 現在のところ、プロセスはC ++で記述されていますが、新しいクライアントでは、明らかにネイティブコードがない(JNIがない)Java仮想マシンを使用して、マルチプラットフォームでプログラムを実行できるようにする必要があります。アイデアは、生成されたjarを取得して別のシステム(Linux、Win、32ビット-64ビット)にコピーできるようにすることであり、動作するはずです。 周りを見回すと、C ++をLLVM IRコードにコンパイルしてから、そのコードをJavaバイトコードにコンパイルできるように見えます。生成されたコードが読み取り可能である必要はありません。 私はemscriptenを使用して同様のもので少しテストしました。これはC ++コードを取り、それをJavaScriptにコンパイルします。結果は有効なJSですが、完全に読み取ることができません(アサンブラーのように見えます)。 この技術を使用して、C ++からJavaバイトコードへのアプリケーションの移植を行った人はいますか? どのような問題に直面する可能性がありますか? 量産コードに対する有効なアプローチはありますか? いくつかのコメントの後で私のポイントをより明確にするために、おそらくポートが十分に使用されていない可能性があります。結果として、読み取り可能なソースコードは期待できません.javaバイトコードだけなので、今後開発される「ポート」ではありません。ターゲットのプラットフォームは、ネイティブのアッサンブラーではなく、Java JVMでなければなりません。 注:現在、いくつかの非標準C ++およびクローズソースライブラリがあることを承知しています。この非標準コードおよびすべてのクローズソースライブラリを削除し、無料のLibreオープンソースソフトウェアを使用する予定です。したがって、すべてのコードが標準C ++コードであると仮定しましょうコンパイル時に利用可能なすべてのコード。 注2:移植可能なC ++コードを記述して、それを目的のターゲットプラットフォームにコンパイルするオプションではありません。コンパイルされたプログラムはマルチプラットフォームでなければならず、したがってJVMを使用します。 注3:現在、Pythonや他の言語ベースに適用される同様のソリューションについては検討していませんが、それについても聞きたいと思います。これにより、ターゲットの実行可能ファイルはjavaバイトコードである必要がありますが、C ++を有効なpythonコンパイル済みコードにコンパイルするオプションがある場合は、それらについても聞きたいと思います。
9 java  c++  porting 

6
私のチームは、独自の基準として、よく評価されている一般的なコーディング標準を使用する必要がありますか?
私が参加しているR&Dチームは、コーディング標準を採用することを決定しました。私たちが最近結成したばかりであり、コードと共通のコーディング時間が少なすぎて、チームで有機的に開発されたもの、および独自のコードからの良い例などに基づいて標準/規約のドキュメントを作成できません。 今、私たち一人ひとりが過去の職場での経験を持っていますが、「ここで行うこの種の仕事にふさわしいことがわかった、この包括的なドキュメントをここで採用しましょう」と言っている人はいません(*)。さらに、一部の私(自分自身を含む)は、公式のコーディング標準がない場所、または別の設定で別の言語で作成した経験のみを持っています(より研究指向の開発作業ではなく、週ごとの高圧の本番環境)。 したがって、私が考えていたオプションの1つは、比較的よく知られていて評判の高いドキュメントを取り上げ、私たちが気にしていない/気にしていないものを切り取り、好みに基づいていくつかの変更を加えることです。 これは一般的な方法ですか?これは良いアイデアだと思いますか?もしそうなら、合理的な「ベースライン」コーディング標準とは何でしょうか(どちらが最善か教えてください、ここで宗教的対立を始めたくありません。包括的または「中立」に基づいて構築できるものを指摘してください) 。) ノート: C、C ++、OpenCL、CUDA、Pythonで動作することを期待しています。 私たちは4人のチームとマネージャーのチームで、1年程度で5〜6人に成長すると予想されています。 私たちの会社では、チームはほぼ完全に自律的であり、通常はまったく相互作用しません(お互いのコードを使用することによってさえも-作業は完全に異なるプロジェクトにあります)。そう-全社的な考慮事項はありません。 ツールに関しては、現時点ではEclipseを使用することがわかっているため、そのコードフォーマッターは少なくとも1つのツールになります。Ctrl + Shift + Fは長い間私の友人です 私がJavaを書くとき、私はBlochの効果的なJavaにできる限り厳密に従うことを採用しました。さて、それは完全なコーディング標準ではありませんが、コーディング標準のレンガ、セメント、モルタルを呼び出すことができます。そのようなものを「ミックス」の一部として含めることを考えていました(Javaは実行しないことに注意してください)。 より広い意味でのコーディング標準を意味します。たとえば、このP.SEの質問に対する回答で行われた提案を採用します。 C ++コーディング標準ドキュメントの大きなリストを見つけました。多分私は私たちのベースラインを採掘するべきです。 (*)それはまったく真実ではありませんが、私はこの質問をあまりにも多くの詳細で複雑にしたくありません。

7
ヘッダーがCPPファイルに明示的に含まれるようにする
#includeHPPファイルを介して既に何がインクルードされているかに関係なく、CPPファイルで使用されるすべてのタイプのヘッダーには、一般的には良い習慣だと思います。#include <string>たとえば、CPPでスキップした場合でもコンパイルできたとしても、HPPとCPPの両方で使用する可能性があります。これにより、HPPがフォワード宣言を使用したかどうかを心配する必要がなくなります。 この#includeコーディングスタイルを適用できるツールはありますか?このコーディングスタイルを適用する必要がありますか? プリプロセッサー/コンパイラーは#includeHPPからのものかCPPからのものかを気にしないので、このスタイルに従うのを忘れてもフィードバックは得られません。

4
非決定論的なリソース管理は漏れやすい抽象化ですか?
私が見ることができることから、リソース管理には、決定論的破壊と明示的破壊という2つの一般的な形式があります。前者の例は、C ++デストラクタとスマートポインタまたはPerlのDESTROYサブです。後者の例は、Rubyのブロックから管理リソースへのパラダイムまたは.NETのIDisposeインターフェイスです。 新しい言語は後者を選択しているようです。おそらく、参照カウント以外の種類のガベージコレクションシステムを使用することの副作用としてです。 私の質問はこれです:スマートポインターまたは参照カウントガベージコレクションシステムのデストラクタ-ほとんど同じこと-が暗黙的かつ透過的なリソース破壊を可能にすることを考えると、それは明示に依存する非決定的タイプよりもリークの少ない抽象化です表記? 具体的な例を挙げましょう。単一のスーパークラスのC ++サブクラスが3つある場合、特定の破棄を必要としない実装がある可能性があります。多分それは別の方法でその魔法をします。特別な破棄を必要としないという事実は関係ありません。すべてのサブクラスが同じように使用されます。 別の例では、Rubyブロックを使用しています。2つのサブクラスはリソースを解放する必要があるため、スーパークラスはコンストラクターでブロックを使用するインターフェースを選択します。ただし、他の特定のサブクラスは特別な破棄を必要としないため、ブロックを必要としない場合もあります。 後者はリソース破壊の実装の詳細をリークしますが、前者はリークしませんか? 編集:たとえば、RubyとPerlの比較は、一方は確定的破壊を持ち、もう一方はそうではないため、より公平である可能性がありますが、両方ともガベージコレクションされます。

3
良いC可変長配列の例[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 この質問はSOでかなりフリーズしたレセプションを得たので、そこで削除して代わりにここで試すことにしました。ここにも当てはまらないと思われる場合は、少なくとも私が求めている例を見つける方法の提案についてコメントを残してください... C99 VLAを使用することで、現在の標準ヒープを使用するC ++ RAIIメカニズムなどよりも優れた例を挙げていただけますか? 私が後の例は次のとおりです: ヒープを使用するよりも簡単に測定できる(おそらく10%)パフォーマンスの利点を実現します。 アレイ全体をまったく必要としない、適切な回避策はありません。 実際には、最大サイズを固定する代わりに、動的サイズを使用するメリットがあります。 通常の使用シナリオでスタックオーバーフローが発生することはほとんどありません。 C ++プロジェクトにC99ソースファイルを含めるためのパフォーマンスを必要とする開発者を誘惑するのに十分な強さである。 文脈上のいくつかの明確化を追加:C99の意味と、標準C ++に含まれていないように私は、VLAを意味:int array[n]どこn変数です。そして、私はそれが他の標準(C90、C ++ 11)によって提供される代替手段に勝るユースケースの例の後にいます: int array[MAXSIZE]; // C stack array with compile time constant size int *array = calloc(n, sizeof int); // C heap array with manual free int *array = new int[n]; // …
9 c++  c  stack  heap 

4
C ++でのスレッド間の高速メッセージパッシングのためのメモリ管理
2つのスレッドがあり、互いに非同期でデータメッセージを非同期に送信することによって通信するとします。各スレッドには、ある種のメッセージキューがあります。 私の質問は非常に低いレベルです。メモリを管理する最も効率的な方法として何が期待できますか?私はいくつかの解決策を考えることができます: 送信者はを介してオブジェクトを作成しますnew。受信者の呼び出しdelete。 メモリプーリング(メモリを送信者に転送するため) ガベージコレクション(Boehm GCなど) (オブジェクトが十分に小さい場合)ヒープ割り当てを完全に回避するために値でコピー 1)は最も明白なソリューションなので、プロトタイプに使用します。おそらくそれはすでに十分であるということです。しかし、私の特定の問題とは関係なく、パフォーマンスを最適化する場合、どの手法が最も有望かと思います。 特にスレッド間の情報の流れに関する追加の知識を使用できるので、プールは理論的には最高だと思います。でも、それが一番難しいのも怖いです。たくさんのチューニング... :-( ガベージコレクションは後で(ソリューション1の後)非常に簡単に追加できるはずであり、非常にうまく機能すると期待しています。したがって、1)が非効率的であることが判明した場合、それが最も実用的な解決策であると思います。 オブジェクトが小さくてシンプルな場合は、値によるコピーが最も高速な場合があります。ただし、サポートされるメッセージの実装に不必要な制限を強いることを恐れているので、避けたいと思います。

5
「プログラミングエラー」の例外-アプローチは適切ですか?
私は現在、例外の使用方法を改善しようとしていますが、プログラミングエラーを示す例外(たとえば、誰かが引数としてnullを渡した、またはオブジェクトが破棄された後にメソッドを呼び出した)と、呼び出し側の障害ではない操作(I / O例外など)。 これらの2種類の例外はどのように異なる方法で処理する必要がありますか?エラー例外を明示的に文書化する必要があると思いますか、または関連する前提条件を文書化するだけで十分ですか?また、明らかな場合(たとえば、ObjectDisposedException破棄されたオブジェクトでメソッドを呼び出す場合)、前提条件またはエラー例外のドキュメントを省略できますか?
9 java  c#  c++  exceptions 

6
プログラミングエクスペリエンスを増やすにはどうすればよいですか?[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私は3年目のコンピュータサイエンスの学生になり、ヘッドファーストJava、ヘッドファーストCを読みました。現在、C ++を読んでいます。これは、経験のある人向けの優れた教育スタイルがあるため、私が最も好きな言語です。QTでソフトウェアを作成する方法を学ぶか、objective-C(for iPhone)を学ぶか、Effective C ++を読むことを計画しています。 プログラマーとしての経験を得るにはどうすればよいですか?オープンソースプロジェクトに参加するスキルはありますか、それともphp、mySQL、またはその他の言語を学ぶ必要がありますか。一部のクラスは非常に難しい(理論的なコンピュータサイエンス)場合もありますが、プログラミングとコンピュータサイエンスは一般的に大好きです。また、C ++の第一人者になる予定ですが、すぐには実現しません。
9 c++  experience  qt 

4
メモリ使用量の分析:JavaとC ++は無視できるか?
Javaで記述された整数オブジェクトのメモリ使用量は、C ++で記述された整数オブジェクトのメモリ使用量とどのように比較されますか?違いは無視できますか?変わりはない?大きな違いは?言語に関係なくintはintであるため、同じだと思います(?) 私がこれを尋ねた理由は、プログラムのメモリ要件がプログラマーが特定の問題を解決するのをいつ妨げるかを知ることの重要性について読んでいたからです。 私を魅了したのは、単一のJavaオブジェクトを作成するために必要なメモリの量です。たとえば、整数オブジェクトを考えてみましょう。私が間違っているが、Java整数オブジェクトが24バイトのメモリを必要とする場合は修正してください。 intインスタンス変数用に4バイト 16バイトのオーバーヘッド(オブジェクトのクラス、ガベージコレクション情報、同期情報への参照) 4バイトのパディング 別の例として、Java配列(オブジェクトとして実装されている)には48バイト以上が必要です。 24バイトのヘッダー情報 16バイトのオブジェクトオーバーヘッド 長さは4バイト パディング用に4バイト さらに、値を格納するために必要なメモリ これらのメモリ使用量は、C ++で記述された同じコードとどのように比較されますか? 以前は自分が書いたC ++およびJavaプログラムのメモリ使用量について気づいていませんでしたが、アルゴリズムについて学び始めた今、コンピューターのリソースに対する理解が深まっています。

9
printf-バグの原因?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私はprintfコードでトレース/ロギングの目的で多くを使用していますが、それがプログラミングエラーの原因であることがわかりました。私は常に挿入演算子(<<)が少し奇妙なものであることに気付きましたが、代わりにそれを使用することでこれらのバグのいくつかを回避できると思い始めています。 誰かが似たような啓示を受けたことがありますか、ここでストローを掴んでいるだけですか? いくつかのポイントを奪う 私の現在の考え方は、型安全性はprintfを使用する利点よりも優れているということです。本当の問題は、フォーマット文字列とタイプセーフでない可変長関数の使用です。 多分私は使用せ<<ず、stl出力ストリームのバリアントを使用しますが、非常によく似たタイプセーフメカニズムの使用を検討します。 トレース/ロギングの多くは条件付きですが、めったに分岐しないという理由だけで、テストのバグを見逃さないように常にコードを実行したいと思います。
9 c++ 

3
基本クラスの抽象化とコピーの構築、経験則
多くの場合、オブジェクトのインターフェイスを分離するための抽象基本クラスを用意することをお勧めします。 問題は、C ++ではデフォルトでコピー構築であるIMHOがかなり壊れており、コピーコンストラクターがデフォルトで生成されていることです。 では、抽象基本クラスと派生クラスに生のポインタがある場合の落とし穴は何ですか? class IAbstract { ~IAbstract() = 0; } class Derived : public IAbstract { char *theProblem; ... } IAbstract *a1 = new Derived(); IAbstract a2 = *a1;//??? そして、階層全体のコピー構築を完全に無効にしますか?コピー構造をプライベートとして宣言しますIAbstractか? 抽象基本クラスで3つのルールはありますか?

5
拡張子のないC ++ヘッダーファイルを使用することは良い習慣ですか?
私が従うべきC ++ガイドラインに関して私の同僚と議論があります。 彼は現在、すべてのライブラリをそのように設計しています。 彼はファイル名に一貫性のない大文字と小文字を使用しています 彼のヘッダーの一部には拡張子がありません 拡張子がないことはC ++標準ファイル用に予約されているものであり、大文字を使用するとエラーが発生しやすくなると考えています(特に、WindowsとLinuxの両方で機能するコードを扱う場合)。 彼のポイントは、彼がQt(Qtを使用しないコードの場合でも)慣例に従い、「Qtがそのように実行する場合、それは悪いことではない」と言い続けることです。 今、私はオープンマインドを保つようにしていますが、彼のライブラリで/彼のライブラリで作業しなければならないときは本当に気分が悪いです。これに関して共通して確立された一連のルールはありますか?標準はそれについて何かを教えていますか? どうもありがとうございました。
9 c++  naming 

3
カスタムヒープアロケーター
ほとんどのプログラムは、関数型プログラミング言語が古いオブジェクトを変更するよりも新しいオブジェクトを割り当てることを好み、ガベージコレクターが解放することを心配する程度にまで、ヒープの割り当てについてかなりカジュアルになり得ます。 ただし、組み込みプログラミングのサイレントセクターでは、メモリとリアルタイムの制約により、ヒープ割り当てをまったく使用できないアプリケーションが数多くあります。処理される各タイプのオブジェクトの数は仕様の一部であり、すべてが静的に割り当てられます。 ゲームプログラミング(少なくともハードウェアのプッシュに意欲的なゲームでは)は、その中間になることがあります。動的割り当てを使用できますが、アロケーターをブラックボックスとして処理できない十分なメモリとソフトリアルタイム制約があります、ガベージコレクションはもちろんのこと、カスタムアロケータを使用する必要があります。これが、ゲーム業界でC ++が依然として広く使用されている理由の1つです。http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.htmlのようなことができます その中間の領域には他にどのようなドメインがありますか?ゲームとは別に、カスタムアロケーターが頻繁に使用されていますか?

4
C ++を最新の開発で最新の状態に戻すにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 4年前休業。 言語とベストプラクティスが進化したと確信しているので、非常に錆びたC ++を最新の状態にするにはどうすればよいですか?これはトピックから外れている可能性があるため、詳細を説明します。約10年前、私は非常に優れたC ++プログラマーだったと思います。スコットマイヤーズの本を食べました。ドブス博士の糸くずの出た広告のパズルを解くことができました。たぶん私は少し言語弁護士でした。私はほとんどJavaをプログラミングしており、過去10年間は​​一部のpythonをプログラミングしてきたので、私のOOスキルはまだゼロに近づいています。しかし、C ++が一般的である会社に参加して、私は自分自身を認めなければならないことに気付いたので、私は本当に錆びており、名前空間などの新しいまたは私が覚えているよりもはるかに一般的な言語機能があります。 コードの読み取りと書き込み(特にペアリング)は速度を上げるための良い方法だと私は理解していますが、他の人がこれを勧めて他のリソースを使って頭を加速させることはできますか?本?ウェブページ?チュートリアル? 要約する: C ++固有のリフレッシャーリソースの推奨事項 一般的にOO /プログラミングではありません。 単にコードを読み書きすることに加えて。

2
ビルドの自動化:Qt以外のプロジェクトでQMakeを使用するのは通常ですか?
したがって、私はC ++ライブラリを作成する予定であり、それをクロスプラットフォームにしたいと考えています。このライブラリはUIを処理せず、依存関係をできるだけ少なくしたいので、Qtを使用しません(実際には、Qtは私が望むものを達成するのに本当に役立ちません。使用する予定のすべてはSTLとBoostです)。クロスプラットフォームプロジェクトを構築することになると、QMakeは非常に使いやすく、経験もあるのでとても気に入っています。CMakeについても良いことを聞きましたが、QMakeほど簡単に使用できるとは思えません。 とにかく、これが私の質問です:私が知っているビルド自動化ツール、またはQMakeがQt以外のプロジェクトのコンテキスト外にあるものを使用すべきですか?これをCMakeを学ぶ機会としてとらえるべきですか?または、これら2つに代わるより良い代替手段はありますか?
9 c++  cmake 

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