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

C ++は汎用プログラミング言語です。もともとCの拡張として設計され、構文は似ていますが、現在は完全に異なる言語になっています。このタグは、C ++コンパイラでコンパイルされる(される)コードに関する質問に使用します。特定の標準リビジョン[C ++ 11]、[C ++ 14]、[C ++ 17]または[C ++ 20]などに関連する質問には、バージョン固有のタグを使用します。



2
関数でconst std :: string&が0を受け入れないようにする
千の言葉に値する: #include<string> #include<iostream> class SayWhat { public: SayWhat& operator[](const std::string& s) { std::cout<<"here\n"; // To make sure we fail on function entry std::cout<<s<<"\n"; return *this; } }; int main() { SayWhat ohNo; // ohNo[1]; // Does not compile. Logic prevails. ohNo[0]; // you didn't! this compiles. return 0; } 文字列を受け入れるブラケット演算子に数値0を渡しても、コンパイラは文句を言わない。代わりに、これはコンパイルされ、メソッドに入る前に失敗します: …

14
キャストを避ける必要があるのはなぜですか?[閉まっている]
休業。この質問はもっと焦点を合わせる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 この質問を改善する コーディングの習慣が不十分であり、パフォーマンスが低下する可能性があるという印象を受けているため、一般的には型をできるだけキャストしないようにします。 しかし、誰かが私になぜそれが正確にそうであるかを説明するように頼んだら、私はおそらくそれらをヘッドライトの中で鹿のように見るでしょう。 なぜ/いつキャストが悪いのですか? それはJava、C#、C ++の一般的なものですか、それともすべての異なるランタイム環境が独自の条件でそれを処理しますか? 任意の言語の詳細は大歓迎です。たとえば、C ++ではなぜ悪いのですか?
97 c#  java  c++  casting 

4
QueryPerformanceCounterの使用方法
私は最近、Timerクラスのミリ秒からマイクロ秒に変更する必要があると判断し、いくつかの調査の結果、QueryPerformanceCounterがおそらく最も安全であると判断しました。(Boost::PosixWin32 APIでは機能しない可能性があるという警告が表示されて、少し遅れました)。しかし、私はそれを実装する方法が本当にわかりません。 私がやっているGetTicks()ことは、使用しているesque関数を呼び出して、それをTimerのstartingTicks変数に代入することです。次に、経過時間を見つけるために、関数の戻り値をから減算しstartingTicks、タイマーをリセットしたら、関数をもう一度呼び出して、startingTicksをそれに割り当てます。残念ながら、私が見たコードではQueryPerformanceCounter()、を呼び出すだけの単純なものではなく、引数として何を渡すべきかわかりません。
97 c++  windows  timer 

9
intからchar *に変換する方法
私が知る唯一の方法は: #include <sstream> #include <string.h> using namespace std; int main() { int number=33; stringstream strs; strs << number; string temp_str = strs.str(); char* char_type = (char*) temp_str.c_str(); } しかし、タイピングが少ない方法はありますか?

7
main関数の代わりにmainと呼ばれるグローバル変数を持つプログラムはどのように機能しますか?
次のプログラムを検討してください: #include <iostream> int main = ( std::cout << "C++ is excellent!\n", 195 ); Windows 7 OSでg ++ 4.8.1(mingw64)を使用すると、プログラムは正常にコンパイルおよび実行され、印刷されます。 C ++は素晴らしいです! コンソールに。main関数ではなくグローバル変数のように見えます。このプログラムを関数なしでどのように実行できますmain()か?このコードはC ++標準に準拠していますか?プログラムの動作は明確に定義されていますか?私も-pedantic-errorsオプションを使用しましたが、プログラムはまだコンパイルして実行されます。

5
Visual Studioのビルドを非常に冗長にするにはどうすればよいですか?
Visual Studioバイナリによってビルドプロセスで使用されるすべてのフラグ、すべてのフラグを取得する必要があります。を使用して詳細な出力を取得しようとしましたが、vcbuildできませんでした。 Visual Studioによって実行されるすべてを確認するには、何をする必要がありますか?ビルドウィンドウで出力を取得する必要はありません。どこでも結構です。

10
ファイルがC ++に存在するかどうかを確認する最良の方法は何ですか?(クロスプラットフォーム)
Cにファイルが存在するかどうかを確認する最良の方法は何ですか?の回答を読みました。(クロスプラットフォーム)、しかし標準のC ++ライブラリを使用してこれを行うより良い方法があるかどうか疑問に思っていますか?できれば、ファイルをまったく開こうとしないでください。 両方ともstat、accessほとんどググできないです。#includeこれらを使用するにはどうすればよいですか?
97 c++  file  file-io 


11
関数の早期復帰の効率
これは、経験の浅いプログラマーとして頻繁に遭遇する状況であり、特に最適化しようとしている私の野心的でスピード重視のプロジェクトについて疑問に思っています。主要なCのような言語(C、objC、C ++、Java、C#など)と通常のコンパイラーの場合、これら2つの関数は同じくらい効率的に実行されますか?コンパイルされたコードに違いはありますか? void foo1(bool flag) { if (flag) { //Do stuff return; } //Do different stuff } void foo2(bool flag) { if (flag) { //Do stuff } else { //Do different stuff } } 基本的に、breakINGまたはreturnINGを早くするときに、直接的な効率のボーナス/ペナルティはありますか?スタックフレームはどのように関係していますか?最適化された特別なケースはありますか?これに大きな影響を与える可能性のある要因(インライン化や "Do stuff"のサイズなど)はありますか? 私は常に、マイナーな最適化よりも読みやすさを改善することを支持しています(パラメーターの検証でfoo1がよく見られます)。 そして、私は時期尚早の最適化の落とし穴を知っています...うーん、それらはいくつかのつらい思い出です。 編集:私は答えを受け入れましたが、EJPの答えはaの使用returnが実質的に無視できる理由をかなり簡潔に説明しています(アセンブリでreturnは、関数の終わりに「ブランチ」を作成しますが、これは非常に高速です。ブランチはPCレジスタを変更し、両方のためにも、キャッシュとパイプライン、かなり微小である。)特にこの場合のためにに影響を与える可能性があり、それは文字通り違いはありませんif/elseし、return関数の最後に同じブランチを作成します。

7
C ++のハンドルとは何ですか?
ハンドルは一種のポインタであるが、そうではなく、オブジェクト自体ではなくオブジェクトへの参照を維持できると言われました。より複雑な説明とは何ですか?
97 c++  handle 

12
C ++ 11で 'for'ループの範囲にあるときに、アイテムをベクトルから削除しますか?
私はIInventory *のベクトルを持っていて、C ++ 11の範囲を使用してリストをループし、それぞれを処理しています。 1つでいくつかのことを行った後、それをリストから削除して、オブジェクトを削除することができます。deleteいつでもポインターを呼び出してクリーンアップできることはわかっていますが、範囲forループ内にあるときに、ポインターをベクターから削除する適切な方法は何ですか?リストから削除すると、ループが無効になりますか? std::vector<IInventory*> inv; inv.push_back(new Foo()); inv.push_back(new Bar()); for (IInventory* index : inv) { // Do some stuff // OK, I decided I need to remove this object from 'inv'... }
97 c++  vector  for-loop  c++11 

2
Qtは仮想純粋スロットをサポートしていますか?
の私のGUIプロジェクトにQtは、すべてから直接継承する多くの「構成ページ」クラスがありますQWidget。 最近、これらすべてのクラスが2つのcommonsスロット(loadSettings()およびsaveSettings())を共有していることに気付きました。 これに関して、私は2つの質問があります: BaseConfigurationPageこれらの2つのスロットを仮想純粋メソッドとして使用して、中間の基本抽象クラス(名前を付けます)を記述することには意味がありますか?(可能なすべての構成ページには常にこれらの2つのメソッドがあるため、「はい」と言います) コードを大幅に変更する前に(必要な場合)、Qtは仮想純粋スロットをサポートしていますか?知っておくべきことはありますか? 以下は、すべてを説明するコード例です。 class BaseConfigurationPage : public QWidget { // Some constructor and other methods, irrelevant here. public slots: virtual void loadSettings() = 0; virtual void saveSettings() = 0; }; class GeneralConfigurationPage : public BaseConfigurationPage { // Some constructor and other methods, irrelevant here. public slots: void …

3
それがQtの通常の関数であるかのように、発行を使用して信号を呼び出す
この信号があるとしましょう: signals: void progressNotification(int progress); 最近、Qtの出力キーワードについて学びました。これまでは、通常の関数のように呼び出すだけで信号を実行していました。だから代わりに: emit progressNotification(1000 * seconds); 私は書きます: progressNotification(1000 * seconds); そのようにそれらを呼び出すことは機能しているようで、接続されたすべてのスロットが実行されるので、emitキーワードを使用すると別の動作が発生しますか、それとも単なる構文上の砂糖ですか?
97 c++  qt 

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