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

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


4
定義としてC#の抽象クラスを使用する
C ++開発者として、私はC ++ヘッダーファイルに非常に慣れており、コード内に何らかの「ドキュメント」を強制することが有益であることがわかりました。そのため、私は通常、C#コードを読む必要があるときに悪い時間を過ごします。私が作業しているクラスのそのようなメンタルマップを持っていません。 ソフトウェアエンジニアとして、プログラムのフレームワークを設計していると仮定しましょう。C ++ヘッダーで行うのと同様に、すべてのクラスを抽象的な未実装クラスとして定義し、開発者に実装させるのはあまりにもクレイジーでしょうか? 誰かがこれをひどい解決策だと思う理由がいくつかあるのではないかと推測していますが、その理由はわかりません。このようなソリューションでは、何を考慮する必要がありますか?

5
自明ではない条件文をループの初期化セクションに移動する必要がありますか?
stackoverflow.comのこの質問からこのアイデアを得ました 一般的なパターンは次のとおりです。 final x = 10;//whatever constant value for(int i = 0; i < Math.floor(Math.sqrt(x)) + 1; i++) { //...do something } 私がやろうとしているのは、条件付きステートメントが複雑なものであり、変わらないということです。 ループの初期化セクションで宣言する方がいいですか? final x = 10;//whatever constant value for(int i = 0, j = Math.floor(Math.sqrt(x)) + 1; i < j; i++) { //...do something } これはもっと明確ですか? 条件式が次のように単純な場合 final …

3
C ++クラスコンストラクターでエラーが発生した場合の対処方法
コンストラクターがいくつかの操作を行うCPPクラスがあります。これらの操作の一部は失敗する場合があります。コンストラクタは何も返さないことを知っています。 私の質問は、 コンストラクターでメンバーを初期化する以外の操作を実行できますか? コンストラクターの一部の操作が失敗したことを呼び出し元の関数に伝えることは可能ですか? new ClassName()コンストラクターでエラーが発生した場合にNULL を返すことはできますか?

3
C ++コンパイラのコンプライアンステストはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 特定のC ++コンパイラのコンプライアンスを測定できる、自由に使用可能/アクセス可能なスクリプト、ソースファイルなど、どこかにありますか? たとえば、ブラウザのAcid3テスト:http ://acid3.acidtests.org/ 私が夢見る結果は、グローバルなパーセンテージのメモ(または複数のメモ、各標準に1つ、たとえばc ++ 98、c ++ 11、c ++ 14など)であり、その後「成功」の詳細なテストになるまたはそれらのそれぞれの「失敗」。 背景:ブーストといくつかの課題のあるコンパイラについて、職場で議論しました。私の対話者は、主要なC ++コンパイラでは機能しないため、ブーストが学術プロジェクトであることについて話しました。精神的に困難なコンパイラは考慮すべきではないと答えました。コンパイラの実際の適合性をコードで測定できると、コンパイラの評価と、それらでコンパイルされたクロスプラットフォームコードで回避する必要がある「コーナーケース」の発見の両方に役立ちます。 編集:2013-06-22 答えではありませんが、明らかに、C ++委員会はこの問題に取り組んでいます: SG10、機能テスト: Clark Nelson(Intel)。特定のC ++製品がまだ機能を実装しているかどうかを確認するための移植可能なコードの方法を標準化するかどうか、およびその方法を調査します。 ソース:http : //isocpp.org/std/the-committee
21 c++ 

3
asm.jsを使用してブラウザーでC ++コードを実行する方法
asm.jsアプリケーションは非常に高速です(ネイティブC ++の速度に近い): http://kripken.github.io/mloc_emscripten_talk/micro4b.png しかし、どのようにしてC ++で作成し、LLVMコードに変換し、emscripten / asm.jsでいくつかのトリックを行うことができますか?私はそれについてのチュートリアルを見つけていません。 そして、C ++でコードを作成する場合、たとえばXMLHttpRequest、WebSockets、CanvasまたはWebGLなどのjs API-sを使用する方法は?
21 c++  javascript  llvm 

11
低遅延コードは時々「ugい」必要がありますか?
(これは主に、低遅延システムに関する特定の知識を持っている人を対象とし、根拠のない意見で答えるだけの人を避けるためです)。 「いい」オブジェクト指向のコードを書くことと、非常に高速で低レイテンシーのコードを書くことの間にトレードオフがあると思いますか?たとえば、C ++の仮想関数/多態性などのオーバーヘッドを回避する-見た目は悪いが非常に高速なコードを書き換えるなど それは理にかなっています-maintainいように見える人は誰でも気にしません(メンテナンス可能であれば)-速度が必要な場合、速度が必要ですか? 私はそのような分野で働いた人々から話を聞きたいと思います。
21 java  c++  c  performance  latency 

6
CまたはC ++で「nullチェック」を行うとはどういう意味ですか?
私はC ++を学んでおり、nullを理解するのに苦労しています。特に、私が読んだチュートリアルでは「nullチェック」の実行に言及していますが、それが何を意味するのか、なぜ必要なのかはわかりません。 ヌルとは正確には何ですか? 「nullをチェックする」とはどういう意味ですか? 常にヌルをチェックする必要がありますか? どんなコード例でも大歓迎です。
21 c++  c  null 

5
静的クラスを名前空間として使用する
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 名前空間として静的クラスを使用している他の開発者を見てきました public static class CategoryA { public class Item1 { public void DoSomething() { } } public class Item2 { public void DoSomething() { } } } public static class CategoryB { public class Item3 { public void DoSomething() { } } public …

12
「Do One Thing」パラダイムが有害になるのはいつですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 引数のために、指定されたファイルの内容を行ごとに出力するサンプル関数を次に示します。 バージョン1: void printFile(const string & filePath) { fstream file(filePath, ios::in); string line; while (std::getline(file, line)) { cout << line << endl; } } 関数は、抽象化の1つのレベルで1つのことを行うことが推奨されることを知っています。私にとっては、上記のコードはほとんど1つのことを行い、かなりアトミックです。 一部の書籍(Robert C. MartinのClean Codeなど)では、上記のコードを個別の機能に分割することを提案しているようです。 バージョン2: void printFile(const string & filePath) { fstream file(filePath, ios::in); printLines(file); } void …

6
ユニットテストを追加することは、よく知られているレガシーコードにとって意味がありますか?
私はTDDの意味でのユニットテストについて話している。(自動化された「統合」ではなく、テストと呼ぶのが好きです。) レガシーコード:(C ++)テストなしのコード。(参照:マイケルフェザーズのレガシーコードでの効果的な作業) しかし、次のようなレガシーコード:私たちのチームが過去10〜5年間作業してきたコードです。そのため、何かを変更するためにどこに置くべきかについて非常によく考えています。 私たちは何のために(Boost.Test経由)の場所でのユニットテスト持ち、いくつかの後に来たか、ユニットテストのための「自然な」フィットされているモジュール(一般的なアプリの特定のコンテナ、文字列のもの、ネットワークヘルパーなど) 適切な自動受け入れテストはまだありません。 さて、最近、3つの新しいユーザー向け機能を実装する「喜び」がありました。 それらのそれぞれは、私が変更するのに必要なコード部分に慣れるのに約1〜2時間、変更するのに必要な(小さな)コードを実装するのに1〜2時間、そしてアプリを確認するのにさらに1〜2時間かかりましたその後正しく実行され、実行するはずでした。 今、私は本当に小さなコードを追加しました。(各機能に対して1つのメソッドといくつかの呼び出し行があると思います。) このコードを(WEwLCで提案されている方法のいずれかを介して)除外するので、単体テストが理にかなっている(完全なトートロジーではない)ために、さらに2〜4時間は簡単にかかっていました。これにより、各機能に50%〜100%の時間が追加され、すぐにメリットは得られません。 コードについて何かを理解するのに単体テストは必要ありませんでした コードがアプリの他の部分に正しく統合されているかどうかをテストする必要があるため、手動テストは同じ量の作業です。 確かに、あれば、後に、「誰かが」に沿って来て、そのコードに触れ、彼は理論的には、そのユニットテストからいくつかの利点を持つことができます。(テストされたコードの島はテストされていないコードの海に住んでいるので、理論的にのみ。) したがって、「今回」は、ユニットテストを追加するというハードワークを行わないことを選択しました。テスト対象のものを取得するためのコード変更は、機能を正しく(そしてクリーンに)実装するためのコード変更よりもはるかに複雑でした。 これは、強く結合されたレガシーコードの典型的なものですか?私は怠け者ですか/チームとして間違った優先順位を設定していますか?または、オーバーヘッドが高すぎないものだけをテストするのが賢明ですか?
21 c++  tdd  legacy  unit-testing 

4
C ++ '11が承認された場合、C ++初心者が言語を学習する方法は変わりますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 私はしばらくの間C ++を学びたかったので、高校でAPコンピュータプログラミングを受講しました(JavaではなくC ++だった頃)。私はCを楽しんでいて、C ++を学ぶ時間を見つけていないか、生産性の高いC#に頼るだけです。 私の質問はこれです:C ++ '11が承認されていることを考えると(完全には実装されていませんが)、これはC ++の学習に取り組むべき方法を変えますか?C ++:The Complete Reference By Herb Schildtを1998年から所有しています。新しく承認された標準は、そのような本からの学習を標準からのものを含むいくつかの新しいチュートリアル/本よりも重要ではありませんか?古い本から学ぶことの利点はありますか?
21 learning  c++ 

9
CはC ++とどう違うのですか?
多くの人が、C ++はCとはまったく異なる言語であると言っていますが、Bjarne自身は、C ++はCから拡張された言語であるため、それが++由来していると述べています。それでは、なぜ誰もがCとC ++は完全に異なる言語であると言い続けるのでしょうか?C ++の拡張機能を除いて、CはC ++とどのように違いますか?

6
一般に、分岐を避けるために仮想関数を使用する価値はありますか?
ブランチミスの仮想コストに相当する命令の大まかな同等物があるように思われますが、同様のトレードオフがあります。 命令対データキャッシュミス 最適化の障壁 次のようなものを見ると: if (x==1) { p->do1(); } else if (x==2) { p->do2(); } else if (x==3) { p->do3(); } ... メンバー関数配列を持つことができます。または、多くの関数が同じ分類に依存している場合、またはより複雑な分類が存在する場合は、仮想関数を使用します。 p->do() しかし、一般的には、それを分岐対仮想関数どのように高価であり、いずれかが親指の大まかなルールを持っていた場合(4などの単純なとしてそれがあった場合に素敵な私が思っていたので、一般化するのに十分なプラットフォーム上でテストするのは難しいですifsがブレークポイントです) 一般的に、仮想機能はより明確であり、私はそれらに寄りかかります。しかし、コードを仮想関数からブランチに変更できる非常に重要なセクションがいくつかあります。これに着手する前に、これについて考えたいと思います。(簡単な変更ではなく、複数のプラットフォームで簡単にテストすることもできません)
21 c++  performance 


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