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

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

6
Qt:アスペクト比を維持しながらQPixmapを含むQLabelのサイズを変更する
QLabelを使用して、動的に変化するより大きなQPixmapのコンテンツをユーザーに表示します。利用可能なスペースに応じて、このラベルを小さくしたり大きくしたりすると便利です。画面サイズは必ずしもQPixmapほど大きくはありません。 どのように私は変更することができますQSizePolicyし、sizeHint()元QPixmapのの縦横比を維持しながら、QLabelのQPixmapのサイズを変更するには? sizeHint()QLabelを変更できminimumSize()ません。ゼロに設定しても効果がありません。hasScaledContents()QLabelに設定すると、拡大できますが、アスペクト比が崩れます... QLabelをサブクラス化することは役に立ちましたが、このソリューションは単純な問題に対してコードを追加しすぎます... サブクラス化せずにこれを達成するための賢いヒントはありますか?
81 c++  qt  qt4  qlabel 


6
std :: vector :: reset()とstd :: vector :: reserved()
この投稿のコメントセクションには、std::vector::reserve() vs std::vector::resize()。の使用に関するスレッドがあります。 元のコードは次のとおりです。 void MyClass::my_method() { my_member.reserve(n_dim); for(int k = 0 ; k < n_dim ; k++ ) my_member[k] = k ; } に要素を書き込むにはvector、正しいことはstd::vector::resize()、ではなく、を呼び出すことだと思いstd::vector::reserve()ます。 実際、VS2010 SP1のデバッグビルドでは、次のテストコードが「クラッシュ」します。 #include <vector> using namespace std; int main() { vector<int> v; v.reserve(10); v[5] = 2; return 0; } 私は正しいですか、それとも間違っていますか?そして、VS2010 SP1は正しいですか、それとも間違っていますか?
80 c++  stl  vector 

5
オブジェクトに優先キューSTLを使用するにはどうすればよいですか?
class Person { public: int age; }; Personクラスのオブジェクトを優先キューに保存したい。 priority_queue< Person, vector<Person>, ??? > 比較のためにクラスを定義する必要があると思いますが、よくわかりません。 また、私たちが書くとき、 priority_queue< int, vector<int>, greater<int> > 大きい方はどのように機能しますか?
80 c++  stl 


6
c ++ 11を使用してコードを複製する
私は現在プロジェクトに取り組んでおり、次の問題があります。 私は2つの異なる方法で働きたいC ++メソッドを持っています: void MyFunction() { foo(); bar(); foobar(); } void MyFunctionWithABonus() { foo(); bar(); doBonusStuff(); foobar(); } 実際の関数ははるかに長いので、コードを複製したくありません。問題は、MyFunctionWithABonusの代わりにMyFunctionが呼び出されたときに、いかなる状況でもプログラムに実行時間を追加してはならないということです。そのため、C ++の比較でチェックするブールパラメータだけを使用することはできません。 私の考えは、C ++テンプレートを使用してコードを仮想的に複製することでしたが、追加の実行時間がなく、コードを複製する必要がない方法を考えることはできません。 私はテンプレートの専門家ではないので、何かが足りないかもしれません。 誰かアイデアがありますか?それとも、C ++ 11ではそれは不可能ですか?
80 c++  c++11  templates 

3
Boostassert.hppファイルでP :: ************はどういう意味ですか?
でブースト/ MPL / assert.hpp、私はこのようなものを見ました: template<class Pred> struct eval_assert { typedef typename extract_assert_pred<Pred>::type P; typedef typename P::type p_type; typedef typename ::boost::mpl::if_c<p_type::value, AUX778076_ASSERT_ARG(assert<false>), failed ************ P::************ >::type type; }; 最初のもの************を構造体のポインタが失敗したものとして扱うことができる場合、P::************私には本当に意味がありません。これは標準のC ++ですか?
80 c++  pointers  boost 

4
C ++配列の初期化
配列をすべて0に初期化するこの形式です char myarray[ARRAY_SIZE] = {0} すべてのコンパイラでサポートされていますか?、 もしそうなら、他のタイプと同様の構文はありますか?例えば bool myBoolArray[ARRAY_SIZE] = {false}
80 c++  syntax 

3
なぜこれがデフォルトのコンストラクターを呼び出すのですか?
struct X { X() { std::cout << "X()\n"; } X(int) { std::cout << "X(int)\n"; } }; const int answer = 42; int main() { X(answer); } 私はこれがどちらかを印刷することを期待していました X(int)、X(answer);からintへのキャストとして解釈される可能性があるためX、または X(answer);変数の宣言として解釈される可能性があるため、何もありません。 ただし、それは出力されX()、なぜX(answer);デフォルトのコンストラクターを呼び出すのかわかりません。 ボーナスポイント:変数宣言ではなく一時宣言を取得するには、何を変更する必要がありますか?

5
多くの(古い)プログラムがround(input)ではなくfloor(0.5 + input)を使用するのはなぜですか?
違いは、次のコードのように、タイブレークに関する入力を与える戻り値にあります。 int main() { std::cout.precision(100); double input = std::nextafter(0.05, 0.0) / 0.1; double x1 = floor(0.5 + input); double x2 = round(input); std::cout << x1 << std::endl; std::cout << x2 << std::endl; } 出力: 1 0 しかし、最終的には結果が異なるだけで、好みの結果を選択します。のfloor(0.5 + input)代わりにを使用している「古い」C / C ++プログラムがたくさんありますround(input)。 歴史的な理由はありますか?CPUで一番安い?
80 c++  rounding  floor 

11
別の関数内で関数を定義できないのはなぜですか?
これはラムダ関数の質問ではありません。ラムダを変数に割り当てることができることを私は知っています。 コード内で関数を宣言することはできるが、定義することはできないというのはどういう意味ですか? 例えば: #include <iostream> int main() { // This is illegal // int one(int bar) { return 13 + bar; } // This is legal, but why would I want this? int two(int bar); // This gets the job done but man it's complicated class three{ int m_iBar; public: …

2
C ++の空のstd :: shared_ptrとnullのstd :: shared_ptrの違いは何ですか?
cplusplus.comのshared_ptrページはの区別声をかけ、空 std::shared_ptrとヌルを shared_ptr。cppreference.comページには、明示的に両方の「空」との比較を区別を呼び出しますが、使用していないnullptrのその説明にstd::shared_ptr行動。 空とnullの間に違いはありますshared_ptrか?このような混合動作ポインタのユースケースはありますか?空でないnullshared_ptrは意味がありますか?通常の使用法(つまり、明示的に作成しなかった場合)で、空であるがnullではない結果になる可能性がある場合はありますshared_ptrか? また、C ++ 11バージョンの代わりにBoostバージョンを使用している場合、これらの回答のいずれかが変わりますか?
80 c++  c++11  shared-ptr 

1
より多くの精神の狂気-パーサータイプ(ルールとint_parser <>)およびメタプログラミング技術
質問は下部に太字で示されています。問題は、最後に向かって蒸留コードフラグメントによっても要約されています。 私は自分の型システム(型システムが型から文字列へと行き来する)を単一のコンポーネント(Lakosによって定義されている)に統合しようとしています。私が使用していますboost::array、boost::variantと、boost::mplこれを達成するために、。タイプのパーサーとジェネレーターのルールをバリアントに統合したいと思います。未定義のタイプ、int4(以下を参照)タイプ、およびint8タイプがあります。バリアントはとして読み取りますvariant&lt;undefined, int4,int8&gt;。 int4特性: struct rbl_int4_parser_rule_definition { typedef boost::spirit::qi::rule&lt;std::string::iterator, rbl_int4()&gt; rule_type; boost::spirit::qi::int_parser&lt;rbl_int4&gt; parser_int32_t; rule_type rule; rbl_int4_parser_rule_definition() { rule.name("rbl int4 rule"); rule = parser_int32_t; } }; template&lt;&gt; struct rbl_type_parser_rule&lt;rbl_int4&gt; { typedef rbl_int4_parser_rule_definition string_parser; }; 上記のバリアントは未定義として開始され、次にルールを初期化します。問題が発生し、50ページのエラーが発生しましたが、最終的に追跡できました。バリアントはoperator=割り当て中に使用し、別のバリアントに割り当てるboost::spirit::qi::int_parser&lt;&gt;ことはできません(operator =)。 対照的に、未定義のタイプには問題はありません。 struct rbl_undefined_parser_rule_definition { typedef boost::spirit::qi::rule&lt;std::string::iterator, void()&gt; rule_type; rule_type rule; rbl_undefined_parser_rule_definition() { rule.name("undefined parse rule"); …

7
'auto'キーワードを明示的に記述する必要があるのはなぜですか?
私はC ++ 98からC ++ 11に移行し、autoキーワードに慣れてきました。autoコンパイラが型を自動的に推測できるかどうかを明示的に宣言する必要があるのはなぜだろうと思っていました。C ++は強く型付けされた言語であり、これはルールですが、変数を明示的に宣言せずに同じ結果を達成することはできませんでしたautoか?
80 c++  c++11  auto 

28
なぜ例外を保守的に使用する必要があるのですか?
例外はめったに使用されるべきではないと人々が言うのをよく見たり聞いたりしますが、その理由を説明することは決してありません。それは本当かもしれませんが、理論的根拠は通常glibです:「それは理由で例外と呼ばれます」これは私には、立派なプログラマー/エンジニアによって決して受け入れられるべきではない一種の説明のようです。 例外を使用して解決できる問題にはさまざまなものがあります。制御フローにそれらを使用するのが賢明でないのはなぜですか?それらがどのように使用されるかについて非常に保守的である背後にある哲学は何ですか?セマンティクス?パフォーマンス?複雑?美学?コンベンション? 以前にパフォーマンスに関する分析を見たことがありますが、一部のシステムに関連し、他のシステムには関連しないレベルです。 繰り返しになりますが、特別な状況のためにそれらを保存する必要があることに必ずしも同意しませんが、コンセンサスの論理的根拠は何であるか疑問に思っています(そのようなものが存在する場合)。
80 c++  exception 

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