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

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

11
「バブルパラドックス」とc ++
ここで記事を読んでいた:http : //www.paulgraham.com/avg.htmlそして「blub paradox」に関する部分は特に興味深いものでした。主にc ++でコーディングしているが、他の言語(主にHaskell)にさらされている人として、これらの言語ではc ++で複製するのが難しいいくつかの便利なことを知っています。質問は、主にc ++と他の言語の両方に習熟している人に対するものですが、c ++のみで記述している場合は概念化や実装が難しい言語で使用する強力な言語機能やイディオムはありますか? 特に、この引用は私の注意を引きました: 帰納法により、さまざまな言語間の力の違いをすべて見ることができるプログラマーは、最も強力な言語を理解しているプログラマーだけです。(これはおそらく、Eric RaymondがLispを使ってより良いプログラマーにしたことを意味するものです。)他の人の意見は、Blubパラドックスのために信頼できません。彼らがプログラムについて考える方法。 私がc ++を使用することで「Blub」プログラマと同等であることが判明した場合、次の質問が発生します。他の言語で遭遇し​​た概念化が難しいと思われる有用な概念やテクニックはありますかC ++で書いているか、「考えている」? たとえば、PrologやMercuryなどの言語に見られるロジックプログラミングパラダイムは、キャスターライブラリを使用してc ++で実装できますが、最終的には概念的にPrologコードの観点から考えており、これを使用する場合はc ++の同等物に翻訳しています。プログラミングの知識を広げる方法として、C ++開発者としては知らないかもしれない他の言語でより効率的に表現される有用な/強力なイディオムの他の同様の例があるかどうかを見つけようとしています。思い浮かぶもう1つの例は、Lispのマクロシステムです。プログラム内からプログラムコードを生成すると、いくつかの問題に対して多くの利点があるようです。これは、c ++内から実装して考えることは難しいようです。 この質問は、「c ++ vs lisp」の討論や、あらゆる種類の言語戦争型の討論を意図したものではありません。このような質問をすることが、私が知らないことを知らないことを知ることができる唯一の方法です。

6
TDDを使用した複雑なコードの良い例[終了]
大規模な現実の複雑なプロジェクトでTDDを使用する良い例は何でしょうか?これまでに見た例はすべて、本や論文を目的としたおもちゃのプロジェクトです... TDDを多用するオープンソースプロジェクトに名前を付けることはできますか?C ++が望ましいですが、JavaとC#または他の類似言語を読むことができます。
37 java  c#  open-source  c++  tdd 

10
私は初心者です。C ++ 11の学習を直接開始できますか?または私は古いC ++を学ぶ必要がありますか?[閉まっている]
私は初心者であり、プログラミングの知識はほとんどありません。 新しいC ++ 11を扱っている本からC ++を直接学んだり、古い最高のC ++の本を勉強したりするのは良いことでしょうか? C ++ 11を学習する前に、C ++についての知識がほとんどないはずですか?またはそこから直接開始できますか? C ++ 11から直接起動すると問題が発生しますか?いいえの場合は、C ++ 11に関する本をいくつか提案してください。
36 c++  c++11 

2
RustはC ++の同時実行機能からどのように分岐しますか?
ご質問 Rustを学ぶために時間を費やすべきかどうかを判断するために、RustがC ++の同時実行機能を根本的かつ十分に改善するかどうかを理解しようとしています。 具体的には、慣用的なRustは、慣用的なC ++の同時実行機能をどのように改善しますか、それとも何らかの相違がありますか? 改善(または相違)はほとんど構文上のものですか、それとも実質的にパラダイムの改善(相違)ですか?それとも別のものですか?それとも、まったく改善(分岐)ではありませんか? 根拠 私は最近、C ++ 14の並行性機能を自分で習おうとしていますが、何かが正しくないと感じています。何か気分が悪い。何が気持ち悪い?言いにくい。 並行処理に関しては、コンパイラが正しいプログラムの作成を実際に支援しようとしていないように感じます。コンパイラではなくアセンブラを使用しているように感じます。 確かに、並行性に関しては、微妙で誤った概念にまだ悩まされている可能性があります。たぶん、私はまだ、ステートフルプログラミングとデータレースの間のBartosz Milewskiの緊張感を理解していません。たぶん、コンパイラーにどれだけの健全な並行方法論があり、OSにどれくらいあるのか、私にはよくわかりません。
35 c++  concurrency  rust  c++14 

9
アルゴリズムはプログラミング言語よりも重要ですか?
現在(2013年)のGoogle Code Jamコンテストでは、40行のコードのみを使用して同じ問題を解決したPythonの人々と比較して、C ++およびJavaの人々が200行以上のコードを必要とする問題がありました。 PythonはC ++やJavaと直接比較することはできませんが、冗長性の違いはおそらくアルゴリズムの効率に影響を与えると考えられます。 言語の選択と比較して、適切なアルゴリズムを知ることはどれほど重要ですか?優れた実装のPythonプログラムを(同じアルゴリズムを使用して)より良い方法でC ++またはJavaで実装でき、これは特定のプログラミング言語の自然な冗長性と関係がありますか?
35 java  c++  algorithms  python 

4
C ++ 11に切り替える方法は?
私はしばらくの間C ++でプログラミングを行ってきましたが、ほとんどはC ++の低レベルの機能に集中していました。それによって、私は主にポインターと生の配列で作業することを意味します。この動作は、クラスでCとしてC ++を使用することで知られていると思います。それにもかかわらず、私は最近初めてCを試しました。C#やJavaなどの言語が、ディクショナリやリストなどの便利な標準ライブラリクラスでこれらの詳細を隠していることに驚きました。 C ++標準ライブラリにはベクター、マップ、文字列などの多くのコンテナがあり、C ++ 11はstd ::配列と範囲ループを使用することでこれに追加するだけであることを認識しています。 これらの最新の言語機能をどのように活用し、どの場面がどの瞬間に適しているかを最もよく学ぶにはどうすればよいですか?最近のC ++でのソフトウェアエンジニアリングは、ほとんど手動のメモリ管理から解放されているのですか? 最後に、新しい標準を最大限に活用するためにどのコンパイラを使用する必要がありますか?Visual Studioには優れたデバッグツールがありますが、VS2012でさえひどいC ++ 11サポートがあるようです。
35 c++  c++11 

3
オブジェクト指向で渡すメッセージとは何ですか?
私は、主にC ++、C#、およびJavaでオブジェクト指向プログラミングを研究しています。カプセル化、継承、およびポリモーフィズムの理解(およびこのサイトで多くの質問を読むこと)で、それを十分に把握していると思いました。 ここにポップアップ表示されるように思われることの1つは、「メッセージパッシング」の概念です。どうやら、これは今日の主流言語でのオブジェクト指向プログラミングでは使用されていないが、Smalltalkでサポートされているものです。 私の質問は: メッセージパッシングとは何ですか?(誰かが実用的な例を挙げることができますか?) C ++、C#、またはJavaでこの「メッセージパッシング」をサポートしていますか?
35 java  c#  c++  object-oriented 

17
初めて高校生にC ++を教える:どこに線を引きますか?
FIRST Robotics Competitionの高校生のチームを指導します。ほとんどのチームは、C ++を使用してロボットソフトウェアを開発しています。チームの多くの学生にとって、これはプログラミングの最初の紹介となります。私はプログラミングを高校生に教えるためにC ++を選択しなかったでしょう(例えば、PythonやJavascriptのほうが簡単だと思います)が、選択は決まっています。 私は彼らに適切なC ++を教えたい(つまり、C / C ++の混合方言、つまりC +を避けたい)が、不必要な複雑さでそれらを怖がらせたくはない。そのことについては: 特に、初日からSTLの使用を開始する必要があります。vectorまたは単に標準配列に固執しますか?配列を導入する方が簡単ですが、ポインターエラーをキャッチするのは難しいかもしれません。 I / Oについてはcout、などに固執すべきprintfですか、それとも習得しやすいと思いますか? このような若い学習者に使用するのに適したC ++のオンラインリソースはありますか? ありがとう! 編集:非常に多くの優れた答えをありがとう。多くの人から推奨されているAccelerated C ++に加えて、C ++ For Everyoneは素晴らしいテキストであることがわかりました。
35 c++ 

13
C ++の最悪の慣行、よくある間違い[終了]
Linus Torvaldsによるこの有名な暴言を読んだ後、私は実際にC ++のプログラマーにとっての落とし穴は何なのか疑問に思いました。私はこの質問とその回答で扱われているタイプミスや悪いプログラムフローを明示的に言及していませんが、コンパイラによって検出されず、最初の実行時に明らかなバグ、完全な設計エラーを引き起こさないより高レベルのエラー、 Cではありえないが、コードの完全な意味を理解していない新参者がC ++で行う可能性が高いこと。 また、通常は予想されないパフォーマンスの大幅な低下を指摘する回答も歓迎します。私が書いたLR(1)パーサージェネレーターについて、ある教授が私に言ったことの例: 不要な継承と仮想性のインスタンスを使用しすぎています。継承は設計をより複雑にし(RTTI(実行時型推論)サブシステムのために非効率的です)、したがって、たとえば解析テーブルのアクションなど、理にかなっている場合にのみ使用する必要があります。テンプレートを集中的に使用するため、実質的に継承は必要ありません。」

10
「変数を常に初期化する」ことで、重要なバグが隠されることはありませんか?
C ++コアガイドラインには、ES.20:常にオブジェクトを初期化するというルールがあります。 使用前設定エラーとそれに関連する未定義の動作を避けます。複雑な初期化の理解に関する問題を回避します。リファクタリングを簡素化します。 しかし、このルールはバグを見つけるのに役立ちません。バグを隠すだけです。 プログラムに初期化されていない変数を使用する実行パスがあると仮定します。これはバグです。未定義の動作はさておき、それはまた何かがうまくいかなかったことを意味し、プログラムはおそらくその製品要件を満たしていません。本番環境に展開されると、金銭的な損失が発生する可能性があります。 バグをどのように選別しますか?テストを作成します。しかし、テストは実行パスの100%をカバーするわけではなく、テストはプログラム入力の100%をカバーすることはありません。それ以上に、テストでさえ欠陥のある実行パスをカバーします-それはまだパスできます。結局、これは未定義の動作であり、初期化されていない変数はある程度有効な値を持つことができます。 ただし、テストに加えて、0xCDCDCDCDのようなものを初期化されていない変数に書き込むことができるコンパイラーがあります。これにより、テストの検出率がわずかに向上します。 さらに良いことには、初期化されていないメモリバイトのすべての読み取りをキャッチするAddress Sanitizerなどのツールがあります。 最後に、静的アナライザーがあります。これは、プログラムを調べて、その実行パスに事前設定読み取りがあることを伝えることができます。 そのため、多くの強力なツールがありますが、変数を初期化すると、サニタイザーは何も見つかりません。 int bytes_read = 0; my_read(buffer, &bytes_read); // err_t my_read(buffer_t, int*); // bytes_read is not changed on read error. // It's a bug of "my_read", but detection is suppressed by initialization. buffer.shrink(bytes_read); // Uninitialized bytes_read could be detected here. // …
35 c++  c 

6
C ++でブール値を使用する必要があるのはいつですか?
私たちは、三目並べゲームを作成しなければならないクラスに割り当てられました。人々は自分自身を複雑にするのが好きなので、メニューを含む複雑なゲームを書きました。ゲームの最後に、もう一度プレイするか、プログラムを終了するかを選択する必要がありました。そのためにint変数を使用しましたが、クラスメートがBOOLを使用していることに気付きました。 より効率的ですか?intboolに保存するのではなく、2つの値のみを保存する回答を保存することの違いは何ですか?これらの変数の正確な目的は何ですか?
34 c++  boolean 

9
C ++をサーバー側のWeb開発言語として使用できますか?[閉まっている]
サーバー側で「スクリプト言語」としてC ++を使用してWeb開発に参加したいと思います。私のサーバーインフラストラクチャは* nixベースであるため、AzureでのC ++でのWeb開発は適用できず、C ++ / CLI ASP.NETも適用できません。 レガシーCGIアプリケーションとは別に、C ++を使用してWeb開発を実行できますか?

12
汎用オブジェクトをコンテナに保存してからオブジェクトを取得し、コンテナからオブジェクトをダウンキャストするのはコードの匂いですか?
たとえば、プレーヤーの能力を高めるためのいくつかのツールを備えたゲームがあります。 Tool.h class Tool{ public: std::string name; }; そしていくつかのツール: Sword.h class Sword : public Tool{ public: Sword(){ this->name="Sword"; } int attack; }; Shield.h class Shield : public Tool{ public: Shield(){ this->name="Shield"; } int defense; }; MagicCloth.h class MagicCloth : public Tool{ public: MagicCloth(){ this->name="MagicCloth"; } int attack; int defense; }; …

3
C ++ 11は、動的/共有ライブラリ境界間でstd libオブジェクトを渡す懸念に対処しましたか?(つまり、dllなど)?
C ++についての私の主な不満の1つは、動的ライブラリ(つまり、dll / so)境界の外側にstdライブラリオブジェクトを渡すことが実際にはどれほど難しいかということです。 stdライブラリは、多くの場合ヘッダーのみです。これは、いくつかの素晴らしい最適化を行うのに最適です。ただし、dllの場合、それらは多くの場合、stdライブラリコンテナの内部構造/コードに影響する可能性のある異なるコンパイラ設定で構築されます。たとえば、MSVCでは、1つのdllがイテレータデバッグをオンにしてビルドされ、別のdllがオフでビルドされます。これらの2つのdllは、stdコンテナーを渡す問題に遭遇する可能性があります。std::stringインターフェイスで公開すると、クライアントが使用しているコードがstd::stringライブラリのに完全に一致することを保証できませんstd::string。 これにより、デバッグや頭痛などの問題が発生しやすくなります。組織内のコンパイラ設定を厳密に制御してこれらの問題を防ぐか、これらの問題のない単純なCインターフェイスを使用します。または、クライアントが使用するはずの予想されるコンパイラ設定を指定します(別のライブラリが他のコンパイラ設定を指定する場合、これは問題になります)。 私の質問は、C ++ 11がこれらの問題を解決するために何かを試みたかどうかです。
34 c++  libraries  c++11 

5
例外の契約を作成および実施するにはどうすればよいですか?
私はチームのリーダーに、bool isSuccessfulまたはenumをエラーコードとともに返す代わりに、C ++で例外を使用できるように説得しようとしています。しかし、私は彼のこの批判に対抗することはできません。 このライブラリを検討してください。 class OpenFileException() : public std::runtime_error { } void B(); void C(); /** Does blah and blah. */ void B() { // The developer of B() either forgot to handle C()'s exception or // chooses not to handle it and let it go up the stack. C(); …
33 c++  exceptions 

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