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

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

4
データ指向設計-1-2を超える構造の「メンバー」では非実用的ですか?
データ指向設計の通常の例は、ボール構造です。 struct Ball { float Radius; float XYZ[3]; }; そして、彼らはstd::vector<Ball>ベクトルを繰り返すアルゴリズムを作ります。 次に、同じことを提供しますが、データ指向設計で実装されます。 struct Balls { std::vector<float> Radiuses; std::vector<XYZ[3]> XYZs; }; 最初にすべての半径で、次にすべての位置などで反復する場合、これは良いことです。ただし、ベクター内のボールをどのように移動しますか?元のバージョンでは、を持っている場合std::vector<Ball> BallsAll、any BallsAll[x]をanyに移動できますBallsAll[y]。 ただし、データ指向バージョンでこれを行うには、すべてのプロパティに対して同じことを行う必要があります(ボールの場合は2回-半径と位置)。しかし、より多くのプロパティがある場合は悪化します。「ボール」ごとにインデックスを保持する必要があり、それを移動しようとすると、プロパティのすべてのベクトルで移動する必要があります。 それは、データ指向設計のパフォーマンス上の利点を損なうものではありませんか?

4
文字列を連結して1回呼び出すよりも、println()を頻繁に呼び出すのはどれほど悪いでしょうか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Code Review Stack Exchangeから移行されました。 5年前に移行され ました。 コンソールへの出力はコストのかかる操作であることは知っています。コードを読みやすくするために、長いテキスト文字列を引数として使用するのではなく、関数を呼び出してテキストを2回出力する方がよい場合があります。 たとえば、どれだけ効率が悪いのか System.out.println("Good morning."); System.out.println("Please enter your name"); 対 System.out.println("Good morning.\nPlease enter your name"); 例では、違いは1回の呼び出しのみprintln()ですが、それ以上の場合はどうなりますか? 関連するメモでは、印刷するテキストが長い場合、ソースコードを表示しているときにテキストの印刷に関連するステートメントが奇妙に見えることがあります。テキスト自体を短くすることができないと仮定すると、何ができますか?これは、複数のprintln()呼び出しが行われる場合ですか?誰かがコード行を80文字(IIRC)を超えてはならないと言っていたので、どうしますか System.out.println("Good morning everyone. I am here today to present you with a very, very lengthy sentence in order to prove a point about how it …
23 java  c++  performance  c  io 

6
ネストされたコメントの問題を解決する方法
1つの言語だけでなく、コメントをネストできないように見えます。この問題の良い解決策はありますか?C / C ++およびJavaでの1つの回避策は、単一行コメントのみを使用することですが、より大きなブロックをコメントアウトすることは不可能になります。私はこのようなものに直面しています: </li><!-- <li><!-- Save --> そのため、コメントを手動で確認して編集する必要があります。多くの言語でこれをどのように扱うべきかアドバイスをいただけますか?私にはわからないが、多分、Pythonにコメント'''を含めることができるかもしれない方法でこれを解決できるの#でしょうか?`
23 java  c++  python  c  comments 

2
C#はネイティブC ++コンパイラとマージされますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 この投稿によると: http://channel9.msdn.com/Forums/Coffeehouse/MS-working-on-a-same-compiler-for-C-AND-C--Not-in-incubation-but-for-production- この投稿にはどの程度の真実がありますか?それは筋金入りのC ++プログラマー(ゲーム開発者など)によって真剣に受け止められるべきですか?? 編集:この質問には別の目的があります... C#はC ++と後方互換性がありますか?
23 c#  c++ 

2
同じことをする異なる関数シグネチャを提供することは良い考えですか?
以下は、3つの値で構成されるC ++クラスです。 class Foo{ //Constructor Foo(std::string, int, char); private: std::string foo; char bar; int baz; }; すべてのパラメータータイプは異なります。 順序が問題にならないように、コンストラクタをオーバーロードできます。 class Foo{ //Constructors Foo(std::string, char, int); Foo(std::string, int, char); Foo(char, int, std::string); Foo(char, std::string, int); Foo(int, std::string, char); Foo(int, char, std::string); private: std::string foo; char bar; int baz; }; しかし、それは良い考えですか? クラス/関数に必要なものがわかっていたので、それを始めました。 私はそれがそれらをどの順序で取ったかをいつも覚えていませんでした。 …

3
プログラミングコンテストやコンテストでC ++が優勢なのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 C ++は非常に高速な言語であることを理解していますが、Cはそれほど高速ではないのでしょうか、それとも場合によっては高速ではありませんか? そうすれば、C ++にはOOPがあると言うかもしれませんが、ほとんどのプログラミングパズルに必要なOOPの量はそれほど大きくなく、私の意見ではCがそれを処理できるでしょう。 私がこれを求めている理由は次のとおりです。私はプログラミングのコンテストやコンテストに非常に興味があり、それらをCでコーディングすることに慣れています。ただし、大多数の人がC ++を使用していることに気付きました(たとえば、Google Code Jam 2011のファイナリスト25人中17人がC ++を使用していましたが、誰もCを使用していませんでした)。 オブジェクト指向とは別に、何がC ++をプログラミング競技に適した言語にしているのですか?大会でより良い成績を収めるために学んで使用すべき言語の特徴は何ですか? 背景については、私は自分がCにかなり習熟していると考えていますが、C ++を学び始めたばかりです。
23 c++  c 

13
システムハンガリー記法はまだ有用な慣習ですか?[閉まっている]
ここで何が求められているかを伝えるのは難しいです。この質問は曖昧、曖昧、不完全、過度に広範、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして、再開できるようにするには、ヘルプセンターに アクセスしてください。 8年前に閉鎖されました。 私はフォーラムを検索しましたが、なぜ回避すべきかという答えは見つかりませんでした。なぜそれが特効薬ではないのかだけです。ですから、この質問は重複しているとは思いません。 そこにあるVALIDに慣れて、私はシステムハンガリーIを捨て去る必要がある理由は? これまでのところ、私はそれを使用することで以下の利点を見ています: 一貫した変数の命名 検索せずにタイプが表示されます(インテリセンスは半分の時間でデッド/インデックス付けされているため、依然として正当な理由です) セマンティクスは名前の2番目の部分に引き続きパックできます そして、次のマイナス面: 一部の人々を困らせます(理由はわかりません) 型が変更された場合、その型は変数の名前と一致しない可能性があります(正当な理由ではないと思います。型はめったに変更されず、「すべての名前を変更」します) なぜ: vector<string> vecCityNames; wstring strCity = L"abc"; //more code here vecCityNames.push_back(strCity); より悪い: vector<string> cityNames; wstring city = L"abc"; //more code here cityNames.push_back(city);//Are we pushing back int on a queue? Float on a stack? Something else?
23 c++  naming 

7
変数にゲッターとセッターがある場合、それはパブリックである必要がありますか?
プライベートな変数を持つクラスがあり、クラスにはその変数のゲッターとセッターがあります。なぜその変数を公開しないのですか? ゲッターとセッターを使用する必要があると思うのは、setまたはget以外の操作を行う必要がある場合だけです。例: void my_class::set_variable(int x){ /* Some operation like updating a log */ this->variable = x; }

9
Java / C ++にパワー演算子がないのはなぜですか?
そのような演算子がありますが**、Pythonでは、なぜJavaとC ++にも演算子がないのかと思っていました。 演算子のオーバーロードを使用してC ++で定義するクラスに簡単に作成できます(Javaでもこのようなことが可能だと思います)が、int、doubleなどのプリミティブ型について話すときは、ライブラリを使用する必要がありますのような関数Math.power(通常、両方をdoubleにキャストする必要があります)。 だから-なぜプリミティブ型にそのような演算子を定義しないのですか?
23 java  c++  python 

16
CがわからなくてもC ++が得意であれば大丈夫ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 ここで最もよく答えられると思う質問があります。 私はC++言語に満足しているので、Accelerated C++ほとんどすべての演習を読んで実行したので、私はかなり上手です。 しかし、私には大きな問題があります。学ぶ必要がありますCか?C私の人生でこれまでやったことがありません。私はちょうどを始めC++、私がプログラミングを始めたとき。おそらく誰もがなぜこの言語をそれほど複雑と呼ぶのかを知りたいと思っていたからです。今、私はその質問への答えを知っていますが;) 私はC今日の世界で知らなくても生き残ることができるかどうかを知ることに特に興味があります。会社で面接をする場合、私に知らないことを伝える場合C-彼らはそれをOKと見なしますか?私が得意とする2つの言語は、PythonとC ++です。企業がインタビューでデータ構造を尋ねると聞いたことがあるので、私はこの原因を尋ねています。だから、彼らが私にそれを実装するように頼んだら、そして私がC ++でそれをするなら、それは受け入れられますか? また、「C ++のときにCを知らない」と言う人は、返信しないでください:)違反はありませんが、なぜCを学ぶことが必須なのか理解できません。
23 c++  c 

1
一部の言語のドキュメントで「ある」ではなく「と同等」と表示されるのはなぜですか?
一部の言語のドキュメントで「ある」ではなく「と同等」と表示されるのはなぜですか? たとえば、Python Docsは言う itertools.chain(*iterables) ... 以下と同等: def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element あるいは、このC ++の参照にfind_if: この関数テンプレートの動作は次と同等です: template<class InputIterator, class UnaryPredicate> InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred) { while (first!=last) { if (pred(*first)) return …

5
メモリ破損のデバッグ
まず最初に、これは絶対的な答えのある完璧なQ&Aスタイルの質問ではないことを理解していますが、それを改善するための表現は考えられません。これに対する絶対的な解決策はないと思います。これが、Stack Overflowではなくここに投稿する理由の1つです。 先月、私はかなり古いサーバーコード(mmorpg)をより近代的で拡張/修正しやすいものに書き換えました。私はネットワーク部分から始め、サードパーティのライブラリ(libevent)を実装して、自分のものを処理しました。すべてのリファクタリングとコードの変更により、どこかでメモリ破損が発生し、どこで発生するかを見つけるのに苦労しています。 原始的なボットを実装して負荷をシミュレートしても、クラッシュが発生しない場合でも、開発/テスト環境で確実に再現することはできません(何らかの原因で発生したlibeventの問題を修正しました) 私はこれまで試しました: 地獄を破壊する-ものがクラッシュするまで無効な書き込みはありません(実稼働では1日以上かかる場合があります。1時間かかる場合があります)。これは本当に私を困惑させます。チャンス?(アドレス範囲を「広げる」方法はありますか?) コード分​​析ツール、すなわちコベリティとcppcheck。彼らはいくつかの..を指摘しましたが、コードの厄介さとエッジケースは深刻なものではありませんでした。 (undodbを介して)gdbでクラッシュするまでプロセスを記録し、逆方向に作業します。この/ sounds /は実行可能であるはずですが、オートコンプリート機能を使用してgdbをクラッシュさせるか、可能性のあるブランチが多すぎるために失われる内部libevent構造になります(1つの破損が原因でに)。ポインターが元々どの場所に/どこに割り当てられていたのかを見ることができれば、ブランチの問題のほとんどを解消できると思います。ただし、undodbを使用してvalgrindを実行することはできません。通常のgdbレコードは、使用できないほど遅くなります(valgrindと組み合わせても機能する場合)。 コードレビュー!自分で(完全に)そして何人かの友人に私のコードを見てもらうことで、それが十分に徹底的だったとは思いませんが。コードレビュー/デバッグを行うために開発者を雇うことを考えていましたが、多額の資金を投入する余裕はありません。彼が問題を見つけられなかったり、資格を持っている人がいなければ、お金はありません。 また、注意する必要があります。通常、一貫したバックトレースが取得されます。クラッシュが発生する場所はいくつかありますが、大部分は何らかの理由でソケットクラスが破損することに関連しています。ソケットではない何かを指している無効なポインタか、ソケットクラス自体が(部分的に)意味不明なもので上書きされています。よく使用される部品の1つであるため、クラッシュが最も多いと思われますが、使用されるのは最初に破損したメモリです。 全体として、この問題はほぼ2か月間(忙しく、趣味のプロジェクトが多い)忙しく、不機嫌なIRLになり、あきらめることを考えるほどイライラしています。私は問題を見つけるために他に何をすべきかについて考えることができません。 見逃した便利なテクニックはありますか?どのように対処しますか?(これについてはあまり情報がないため、それほど一般的ではありません..または私は本当に盲目ですか?) 編集: 重要な場合の仕様: gcc 4.7を介したc ++(11)の使用(debian wheezyが提供するバージョン) コードベースは約15万行です david.pfx投稿への応答で編集:(応答が遅くなって申し訳ありません) パターンを探すために、クラッシュの注意深い記録を保持していますか? はい、私はまだ周りの最近のクラッシュのダンプを持っています いくつかの場所は本当に似ていますか?どのように? さて、最新バージョン(コードを追加/削除したり、関連する構造を変更するたびに変更されるようです)では、常にアイテムタイマーメソッドでキャッチされます。基本的に、アイテムには期限が切れる特定の時間があり、更新された情報をクライアントに送信します。無効なソケットポインタは、主にそれに関連するPlayerクラス(私の知る限り有効)にあります。また、クリーンアップフェーズで、明示的に破棄されていないすべての静的クラスを(__run_exit_handlersバックトレースで)破棄する通常のシャットダウンの後、クラッシュの負荷が発生しています。ほとんどの場合std::map、1つのクラスが関与しますが、それが最初に現れるのは単なる推測です。 破損したデータはどのように見えますか?ゼロ?アスキー?パターン? まだパターンが見つかりませんでした。破損がどこから始まったのかわからないので、わかりにくいです。 ヒープ関連ですか? それは完全にヒープ関連です(gccのスタックガードを有効にしましたが、何もキャッチしませんでした)。 破損は後に発生しfree()ますか? 少し詳しく説明する必要があります。すでに解放されたオブジェクトのポインターが横になっているということですか?オブジェクトが破棄されると、すべての参照をnullに設定するので、どこかで見逃さない限り、いいえ。valgrindには表示されますが、表示されませんでした。 ネットワークトラフィック(バッファサイズ、リカバリサイクル)に特有のものはありますか? ネットワークトラフィックは生データで構成されます。したがって、char配列、(u)intX_tまたはより複雑なもののための(パディングを削除するための)パックされた構造体には、各パケットに、予想されるサイズに対して検証されるidおよびパケットサイズ自体で構成されるヘッダーがあります。サイズは10〜60バイトで、最大の(内部「起動」パケット、起動時に1回起動される)サイズは数Mbです。 多くの生産が主張します。損傷が伝播する前に、早期かつ予想どおりにクラッシュします。 私はかつてstd::map破損に関連したクラッシュを経験しました。各エンティティには「ビュー」のマップがあり、それを見ることができる各エンティティはその中にあります。前後に200バイトのバッファーを追加し、0x33で埋め、各アクセスの前にチェックしました。腐敗は魔法のように消え去りました。私は何かを動かして、他の何かを腐敗させたに違いありません。 戦略的なロギング。これにより、直前に何が起こっていたかを正確に把握できます。回答に近づいたら、ログに追加してください。 それは機能します。 必死になって、状態を保存して自動再起動できますか?私はそれを行う生産ソフトウェアのいくつかの部分を考えることができます。 やややる。このソフトウェアは、メインの「キャッシュ」プロセスと、すべてのものを取得して保存するためにすべてキャッシュにアクセスする他のワーカープロセスで構成されています。そのため、クラッシュごとに大きな進歩を失うことはありません。それでもすべてのユーザーが切断されるなど、間違いなく解決策ではありません。 並行性:スレッド化、競合状態など 「非同期」クエリを実行するmysqlスレッドがありますが、これはすべてそのままで、すべてのロックを備えた関数を介してデータベースクラスと情報を共有するだけです。 割り込み 30秒間のサイクルを完了しなかった場合に停止するロックを防ぐための割り込みタイマーがありますが、そのコードは安全なはずです: if (!tics) { abort(); } else …
23 c++  debugging  memory 


6
科学ソフトウェアの継続的統合
私はソフトウェアエンジニアではありません。私は地球科学の分野で博士課程の学生です。 ほぼ2年前、科学ソフトウェアのプログラミングを開始しました。継続的インテグレーション(CI)を使用したことはありません。主に、最初はそれが存在することを知らず、このソフトウェアに取り組んでいるのは私だけだったからです。 現在、ソフトウェアのベースが実行されているため、他の人がそれに興味を持ち始め、ソフトウェアに貢献したいと考えています。計画では、他の大学の他の人がコアソフトウェアへの追加を実装しています。(バグが発生する可能性があります)。さらに、ソフトウェアは非常に複雑になり、テストがますます難しくなりました。また、作業を継続する予定です。 この2つの理由により、私はCIの使用についてますます考えています。私はソフトウェアエンジニアの教育を受けたことがなく、CIについて聞いたことがありません(私たちは科学者であり、プログラマーではありません)。 私はいくつかのアドバイスを得たい質問がいくつかあります: まず、ソフトウェアの動作の簡単な説明: ソフトウェアは、必要なすべての設定を含む1つの.xmlファイルによって制御されます。入力引数として.xmlファイルへのパスを渡すだけでソフトウェアを起動すると、実行され、結果を含むいくつかのファイルが作成されます。1回の実行に最大30秒かかります。 科学的なソフトウェアです。ほとんどすべての関数には複数の入力パラメーターがあり、そのタイプはほとんどが非常に複雑なクラスです。これらのクラスのインスタンスを作成するために使用される大きなカタログを持つ複数の.txtファイルがあります。 では、私の質問に行きましょう。 ユニットテスト、統合テスト、エンドツーエンドテスト?:私のソフトウェアは現在、約30.000行のコードで、数百の関数と〜80クラスです。すでに実装されている数百の関数の単体テストの作成を開始するのは、ちょっと奇妙に感じます。だから私は単にいくつかのテストケースを作成することを考えました。10〜20個の異なる.xmlファイルを準備し、ソフトウェアを実行します。これがエンドツーエンドテストと呼ばれるものだと思いますか?私は頻繁にこれを行うべきではないことを読みましたが、すでに動作するソフトウェアをお持ちの場合、それはスタートとして大丈夫ですか?または、すでに動作しているソフトウェアにCIを追加しようとするのは、単純な馬鹿げたアイデアでしょうか。 関数パラメーターを作成するのが難しい場合、単体テストをどのように作成しますか? 私は機能を持っていると仮定double fun(vector<Class_A> a, vector<Class_B>)し、通常、私はタイプのオブジェクトを作成するために複数のテキストファイル内の最初の読み取りに必要があるだろうClass_AとしClass_B。Class_A create_dummy_object()テキストファイルを読み取らずにダミー関数を作成することを考えました。また、何らかのシリアル化の実装についても考えました。(クラスオブジェクトは複数のテキストファイルにのみ依存するため、クラスオブジェクトの作成をテストする予定はありません) 結果が大きく変動する場合のテストの書き方 私のソフトウェアは、大きなモンテカルロシミュレーションを利用し、繰り返し動作します。通常、1000回の反復があり、反復ごとに、モンテカルロシミュレーションに基づいてオブジェクトのインスタンスを500〜20.000個作成しています。1つの反復の1つの結果のみが少し異なる場合、今後の反復全体が完全に異なります。この状況にどのように対処しますか?最終結果は非常に変動するので、これはエンドツーエンドのテストに対する大きなポイントだと思いますか? CIに関するその他のアドバイスは大歓迎です。

4
C ++の安全なインターフェイスのパターンは何ですか
この質問は、Software Engineering Stack Exchangeで回答できるため、Code Review Stack Exchangeから移行されました。 5年前に移行され ました。 注:以下はC ++ 03コードですが、今後2年以内にC ++ 11への移行を予定しているため、この点に留意する必要があります。 私は、C ++で抽象的なインターフェースを作成する方法についてのガイドライン(特に初心者向け)を書いています。この件についてサッターの両方の記事を読み、インターネットで例と回答を検索し、いくつかのテストを行いました。 このコードはコンパイルしてはいけません! void foo(SomeInterface & a, SomeInterface & b) { SomeInterface c ; // must not be default-constructible SomeInterface d(a); // must not be copy-constructible a = b ; // must not be assignable } …
22 c++ 

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