問題タブ [explicit-constructor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - copy-list-initializationが明示的なコンストラクターを許可した場合、何がうまくいかない可能性がありますか?
C ++標準§13.3.1.7[over.match.list]では、次のように記述されています。
copy-list-initializationでは、
explicit
コンストラクターが選択されている場合、初期化の形式が正しくありません。
これが、たとえば次のようなことができない理由です。
(ここで行われるのは変換ではなく、コンストラクターが「暗黙的」であったとしても変換されないことに注意してください。これはfoo
、コンストラクターを直接使用したオブジェクトの初期化です。以外はstd::string
、ここでは変換はありません。)
これは私には完全に問題ないようです。暗黙の変換が私を噛む方法はありません。
{ "answer", 42 }
他の何かを初期化できる場合、コンパイラは私を裏切って間違ったことをしません:
問題はありません。呼び出しがあいまいで、コードがコンパイルされないため、オーバーロードを明示的に選択する必要があります。
禁止事項が明記されているので、ここで何かが足りない気がします。私が見る限り、明示的なコンストラクターを選択するリスト初期化は私には問題のようには思えません。リスト初期化構文を使用することにより、プログラマーはすでにある種の「変換」を実行したいという願望を表明しています。
何がうまくいかない可能性がありますか?私は何が欠けていますか?
c++ - 「Xx(42)」と「X x = 42」を使用したオブジェクト構成の違いは?
コンストラクターが定義されたクラスXがあるとしX(int value)
ます。
これは意味的に同等ですか?
Xのコンストラクターに明示的なキーワードを追加した場合にのみ違いが現れると思います。そうでない場合、コンパイラーは式X x = 42;
を次のように減らします。X x(42);
間違っていたら訂正してください。
c++ - 「複数の演算子+がこれらのオペランドに一致します」エラー
学校の課題のためにお金のクラスを作成しています。Moneyからdoubleへの変換を定義し、intを受け取るMoneyのコンストラクターがあり、別のコンストラクターがdoubleを取り、「+」演算子をオーバーロードして、Money型の2つのオブジェクトを足し合わせました。myMoney + 10
myMoneyがMoney型のオブジェクトであり、10が明らかに整数であるようなことをしようとすると、エラーメッセージが表示されます。関連する残りのコードは次のとおりです。
このプログラムは、試してみても、両方のコンストラクターを明示的にした場合でも実際に機能Money(double(myMoney)+10)
しますが、それ以外の場合は自動変換で何が起こっているのかわかりません。誰かがこの振る舞いを説明できますか?
c++ - リンクリストを使用して明示的な値コンストラクターを設定するには?
プロジェクトの場合、明示的な値のコンストラクターで初期化できるように、リンクされたリスト オブジェクトを設定しようとしています。私はそれを次のようにしたい:
しかし、オブジェクトを印刷すると、この記号「=」だけが表示され、あなたの長さを印刷すると、-858993459が表示されます
これが私の明示的な値コンストラクターです。誰かが私が間違っていることを教えてもらえますか?
役立つ場合は、クラス宣言ファイルを次に示します
c++ - 継承と明示的なコンストラクター?
次のコードを検討してください。
同じ明示的/暗黙的プロパティを持つのDerived
すべてのコンストラクターを持つような方法でこのコードを再設計する方法はありますか?Base
c++ - 現在の型を除く Base から派生したすべての型で利用可能な暗黙のコンストラクター?
次のコードは私の問題を要約しています:
サンプルコードのように明示的なコンストラクターが既にあることを考慮して、テンプレートパラメーターに関係なく、現在のクラスを除いて、親クラスから派生したすべてのクラスに暗黙的なコンストラクターを制限する方法は?
編集: Base からの暗黙のコンストラクターについては、明らかに次のように記述できます。
しかし、その場合、コンパイラがこのコンストラクタを暗黙のコンストラクタとして使用しないという保証はありDerived2<OtherParameter1, OtherParameter2, OtherParameter>
ますか?
EDIT2:ここにテストがあります:(ここのLWS: http://liveworkspace.org/code/cd423fb44fb4c97bc3b843732d837abc )
最後の行が気になります。C++標準で大丈夫ですか?g++ のバグですか?
c++ - C++ は常に明示的なコンストラクターを使用します
次のブログを読んだ後:
http://xania.org/200711/ambiguous-overloading
私は、「コンストラクターを常に明示的に定義するべきではないのか?」と自問し始めました。
だから私はこの記事を見つけた以上に読み始めました:
http://www.sjbrown.co.uk/2004/05/01/always-use-explicit/
これは別の例を示し、その背後にある彼の考えも説明しています。もちろん、これはあるブロガーの考えです。
私はあなたの何人かから聞いてうれしいです, 方法についてのあなたの考え, この主題についてのあなたの経験は何ですか, そしてどちらの方法のいくつかの例もいいでしょう.
c++ - N項コンストラクターで明示的ですか?
このプレゼンテーション: http://qtconference.kdab.com/sites/default/files/slides/mutz-dd-speed-up-your-qt-5-programs-using-c++11.pdf
explicit
著者は、N-ary コンストラクターが C++11 バージョンのキーワードの恩恵を受けることを示唆しています。
複数のコンストラクター パラメーターがある場合にこのキーワードを便利にする C++11 の変更点は何ですか?
c++ - 明示的なコンストラクターとオーバーロード
こんにちは、みんな :)
私の質問: この特定のケースでの明示的なコンストラクターと 2 つの演算子のオーバーロードの目的は何ですか?また、使用例ではどのように使用されていますか?
前もって感謝します。
c++ - 「明示的」とマークされた C++11 initializer_list コンストラクター
{a} のような式が予期しない暗黙的な変換にならないようにするために、明示的な init-list ctor を使用できますか? そして別の考え:私はそれについて心配する必要がありますか?単純に と書く{a}
よりは間違いである可能性は低くなりますが、a
一方で、暗黙の変換によってオブジェクトを構築していることは、コードからはまだ明確ではない場合があります。