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

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

5
constが早すぎる最適化を参照するときに引数を渡しますか?
「時期尚早の最適化はすべての悪の根源です」 これは私たち全員が同意できると思います。そして、私はそれを避けるために一生懸命努力します。 しかし最近、私はValueではなくconst Referenceによってパラメーターを渡す方法について疑問に思っています。非自明な関数引数(つまり、ほとんどの非プリミティブ型)はconst参照で渡すことが望ましいことを教えられました。これまで読んだ本の中では、これを「ベストプラクティス」として推奨しているものがかなりあります。 それでも私は不思議に思わずにはいられません:現代のコンパイラーと新しい言語機能は驚異的に機能する可能性があるため、私が学んだ知識は非常に古くなっている可能性があり、 void fooByValue(SomeDataStruct data); そして void fooByReference(const SomeDataStruct& data); 私が学んだ慣習は-const参照を渡す(非自明な型のデフォルト)-早すぎる最適化ですか?

8
リリースビルドにアサーションがあるべきか
assertC ++ のデフォルトの動作は、リリースビルドでは何もしないことです。これはパフォーマンス上の理由で、おそらくユーザーが厄介なエラーメッセージを表示しないようにするために行われたものと思われます。 ただし、assert不変式が壊れているためにアプリケーションがさらに悪い方法でクラッシュする可能性があるため、が発生したが無効になった状況はさらに面倒だと主張します。 さらに、パフォーマンスに関する議論は、それが測定可能な問題である場合にのみカウントされます。assert私のコードのほとんどは、より複雑ではありません assert(ptr != nullptr); ほとんどのコードにわずかな影響しか与えません。 これは私に質問を導きます:アサーション(特定の実装ではなく概念を意味する)はリリースビルドでアクティブにする必要がありますか?何故なの)? この質問は、リリースビルドでアサートを有効にする方法ではないことに注意してください(#undef _NDEBUG自己定義のアサート実装を使用するなど)。さらに、サードパーティ/標準ライブラリコードでアサートを有効にすることではなく、私が制御するコードで有効にします。

3
C ++の「メソッド」について(「メンバー関数」に対して)話すのはどれほど間違っていますか?
私は理解して C ++の仕様に応じてそこに「方法」のようなものはなく、いくつかのことを(多くの?ほとんどの?)C ++プログラマは、Javaイズムする「方法」を検討してください。一方で、C ++フォーラムでも、人々はけいれんせずにメソッドについて話すようです。この用語に関する既知の慣例または一般的な慣行を探しています。 C ++とJavaの両方のバージョンを持つAPIを文書化しています。開発者は、おそらく移植とテストの利便性のために、クラスとメソッド/メンバー関数の名前を2つの間で同じにしておきました。このため、これらのAPIについて文書化する必要があるものの一部は、言語の選択の「上」にあります。FoosとBarsについて、baz()とmumble()...メソッドで一般的に話せるようにする必要がありますか? Javaプログラマーがそれを自然とみなす方法について話すと、C ++プログラマーはおそらく理解するでしょうが、一部の人はそれが間違っていると考えるでしょう。私の質問は、これは実際にはどれほど凶悪なのですか?C ++固有の関数とは対照的に、「一般的なOOP」コンテキストでは、C ++メンバー関数は従来どのように話題にされていますか?どちらの言語でも正しくない方法でメンバー関数について話すより良い方法はありますか?(「メンバー関数」は少し冗長です。) これは世論調査ではありません。この問題に対処するための実際の慣習や一般的な慣行があるかどうかを判断しようとしています。 私はこの質問を知っていますが、それは一般にOOPに関するものであり、特定の言語については尋ねません。

5
「#define me(* this)」をお勧めしますか?
このマクロは、コンパイラのコマンドラインパラメーターとして、グローバルヘッダーで定義することができます。 #define me (*this) そして、いくつかの使用例: some_header.h: inline void Update() { /* ... */ } main.cpp: #include "some_header.h" class A { public: void SetX(int x) { me.x = x; me.Update(); } void SomeOtherFunction() { ::Update(); } /* 100 or more lines ... */ void Update() { // ... } int x; …
19 c++ 

11
C ++コンパイラは、不要な括弧を削除/最適化しますか?
コードは int a = ((1 + 2) + 3); // Easy to read より遅く走る int a = 1 + 2 + 3; // (Barely) Not quite so easy to read または、「無駄な」括弧を削除/最適化するのに十分な最新のコンパイラーです。 非常に小さな最適化の懸念のように思えるかもしれませんが、C#/ Java / ...よりもC ++を選択することは、最適化(IMHO)のすべてです。

7
モジュール式プログラミングは計算時間に影響しますか?
誰もがコードをモジュール化する必要があると言っていますが、より少ないメソッドではなく、より大きなメソッドを使用するよりも多くのメソッド呼び出しを使用すると効率は低下しませんか?その点で、Java、C、またはC ++の違いは何ですか? 特にグループでは、編集、読解、理解が簡単になります。それで、コードの整頓の利点と比較して、計算時間の損失は重要ではありませんか?
19 java  c++  c  efficiency 

3
QT-C ++対Generic C ++およびSTL [非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 Ubuntu QQで最近C ++をブラッシュアップしています。すべてのQtフレームワーク、特にGUIの構築が大好きです。過去数年にわたってPyQtを使用していたとき、私はこれに非常に精通しました。 PyQtを使用する場合、QtでC ++を使用する場合に、より顕著な問題がいくつかありました。Qtには、Qt固有のC ++の拡張機能が多数あります。C ++とSTLについてまったく知識がなくても、C ++を使用してQtアプリケーションを作成することができます。 すぐに再び求人市場に出なければならないかもしれませんが、C ++のポジションを検討したいのですが、Qtに縛られすぎると、かつては手ごわいものだった汎用C ++で動作する能力が制限されます長い休眠状態でさびています。 Qtを避けるべきですか?GUIの構築にWxWidgetsまたはGTK ++を使用した方が良いでしょうか? 一般的なC ++とSTLの使用を許可/要求する、使用するのに最適なGUIフレームワークは何ですか?GUIフレームワークなどに関して、C ++プログラマーとしてどのように自分を最も市場性の高いものにするのでしょうか。
19 c++  qt  stl  gtk  pyqt4 

6
単純型の新しい制限を定義できるプログラミング言語
多くの言語が好きC++、C#とJavaあなたのような単純な型を表すオブジェクトを作成できるようにするintegerかをfloat。クラスインターフェイスを使用すると、演算子をオーバーライドし、値が100のビジネスルールを超えているかどうかをチェックするなどのロジックを実行できます。 一部の言語では、これらのルールをアノテーションまたは変数/プロパティの属性として定義することが可能かどうか疑問に思っています。 たとえば、C#次のように記述できます。 [Range(0,100)] public int Price { get; set; } または多分C++あなたは書くことができます: int(0,100) x = 0; このようなことが行われたことは一度もありませんが、保存前にデータ検証に依存するようになったことを考えます。この機能が言語に追加されていないのは奇妙です。 これが可能な言語の例を挙げていただけますか?

6
C ++コンパイラの支払い時期[終了]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 最近、私は開発者がいつコンパイラーにお金を払うべきか疑問に思い始めました。コンパイラは、ほとんどのプラットフォームで無料で提供されていますが、簡単に入手できる無料版もあります。 例: OS X-GCCおよびClang / LLVMには開発者ツールが付属しています。ここで、どのようにして何を実現できるかについての制限はありません。 Linux-GCCと私はもっと確信しています。Linuxコンパイラの現在の状態を知りません。ここで、どのようにして何を実現できるかについての制限はありません。 Windows-MinGWとMicrosoftは無料版のVisual Studioを提供しています。MinGWには制限はありませんが、無料のVisual Studioには重大な制限があると思います。 ただし、例として、IntelはC / C ++コンパイラを製造しています。彼らは価格が高いです。教育的には、OS Xバージョンは49ドルで、Windows / Linuxはそれぞれ129ドルで入手できると思います。その後、完全な「スタジオ」製品も提供します。明らかに教育価格を使用すると、制限が課せられます。 しかし、私が不思議に思っているのは、いつコンパイラーへの支払いを本当に検討すべきかということです。私が考えることができる1つの例は、ビデオゲームです。主要なプラットフォームで動作するコンパイラを使用している場合、プラットフォーム用の切り替えツールはもうありません。ツールが同じであれば、プラットフォーム間での切り替えが容易になると思われます。 Intelコンパイラーなどのコンパイラーと、それらを使用することで得られる真のクロスプラットフォームのメリットにお金を払うことについて、誰かが光を当てることができますか?プラットフォーム固有の手法を使用しないように非常に一生懸命に努力しても、コードの移植性は低下しますか?
19 c++  compiler 


6
C ++開発でSTLを放棄するのは実用的ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 一部の分野(ゲーム業界など)では、STLはお勧めできません。だから私の質問は次のとおりです:場合によってはSTLを使用しないことは本当に良い習慣ですか?もしそうなら、最新のC ++のSTLを使用しない最大の理由は何ですか?
19 c++  stl 

6
C ++コードでC式を使用するのは良い習慣ですか?
学校では、クラスをはるかに凌いでいるという事実にもかかわらず、今年Cを学び始めました。クラスがCの基礎にある間にJava、C ++、Cを学びました。 Cを学ぶべき理由を先生に尋ねましたが、彼女はそれがC ++の基礎であると言いました。プログラミングを始めたとき、C ++の方が簡単であることがわかりました。後でCを習得しました。 私の質問は非常に簡単です〜C ++でC式を使用するのは良い習慣ですか?例を挙げましょう。 このコードは #include <stdio.h> #include <iostream> int main() { int x; scanf("%d", &x); cout << "The number you entered is " << x << "And it's double is " << x*x; return 0; } これよりも効率的またはより良い方法で: #include <iostream> int main() { int x; cin >> …
19 c++  c 

5
なぜC ++はDのアプローチをその概念の実装に採用できないのですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 あなたの多くが知っているように、テンプレート引数の可能な型を制限するためのC ++のアプローチ、概念、C ++ 11には含まれていませんでした。 Dプログラミング言語2.0には、一般的なプログラミングと同様の機能があることがわかりました。その解決策は私には非常にエレガントでシンプルなようです。 私の質問は、C ++が同様のアプローチを使用できない理由です。 C ++の概念の目標は、Dの実装が提供するものよりも大きいでしょうか? または、C ++のレガシーにより、そのようなアプローチを採用できませんか? または他の? ご回答ありがとうございます。 ps Dの汎用プログラミングパワーの例を参照するには、これを参照してください:https : //stackoverflow.com/questions/7300298/metaprogramming-in-c-and-in-d/7303534#7303534
19 c++  templates  d 

14
大学はDOSスタイルのC ++を教えており、その対処方法[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は何年もプログラミングをしていましたが、卒業証書が自分をより雇用可能にすることを望んでいました。一度大学を卒業したことがあるので、5年間のコンピューターサイエンス専攻ではなく、より短く、より実用的なソフトウェアエンジニアリングプログラムを選びました。 理論よりも具体的なスキルに重点を置くことを期待していましたが、大学や教授は正しい、形式的、学術的なものを好むという考えがまだありました。まだ科学ですよね?間違った-多くのITコースがいかにずさんだったかに驚いた。 C ++の入門コースでは、1-2個のプログラムを書いただけで、「なぜグローバルが悪いのか」、「定数が良いのはなぜか」などの決まり文句でテストされました。適切なコンテキストのないランダムな逸話。配布資料が含まれsystem(pause/cls)、getchヘッダーはやconio.hなどiodos.hです。タスクの1つは、32から255の「ASCII文字」を印刷することでした。スクリーンショットでは、このようなテーブルはWindows-1252コードページを使用して印刷されますが、エンコードはまったく言及されません。 質問:大学/教授が劣った、または時代遅れのツールや方法を使用しているように思われ、教えられているコンテンツが境界線に合っていない場合、建設的かつ敬意を持ってどのように対処しますか? データ構造やアルゴリズムなどのトピックについて学習するための単なるツールであるため、いくつかの答えは、プログラミングを超えて見る必要があると指摘しています。私はこの考えに同意しますが、この場合、貧しいスタイルの背後に実際にそのような計画はありませんでした。ほとんどのコースは、多くの背景理論や「全体像」のない別の「ツール」を教えるだけです。そのようなコースを提供するためだけに、彼らはすぐにまとめられたように感じられました。 私はそれに固執し、最終的に卒業しました。品質は全体的にかなり低いままで(いくつかの大きな例外はあります)、他の何人かの学生がそれについて不満を言っています。私は個人的なプロジェクトや学校からよりアルバイトからずっと学んできた予想通り、しかし、学校やラベル「ソフトウェアの学生を」仕上げの工程は、それ自体が神秘的に有用であるように見えます!
19 c++  teaching 

2
RAIIとは?例?
RAIIという用語が使用されるときは常に、人々は実際には初期化の代わりに脱構築について話しています。私はそれが何を意味するのかを基本的に理解していると思いますが、よくわかりません。また、C ++は唯一のRAII言語ですか?JavaまたはC#/。NETはどうですか?
19 c++ 

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