問題タブ [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++ - 明示的なキーワードの意味は何ですか?
explicit
C++ でのキーワードの意味は何ですか?
c++ - 明示的なコンストラクターを使用する場合、キーワードを .h ファイルと .cpp ファイルの両方に入れる必要がありますか?
実際、私の質問はすべてタイトルにあります。
とにかく:
クラスがあり、明示的なコンストラクターを使用しています:
.h
実装(.cpp)ファイルに明示的なキーワードを入れることは義務ですか?
c++ - 複数引数コンストラクターの明示的なキーワード?
私は最近、3 つのコンストラクタを持つ奇妙なクラスに出くわしました。
これは私にはあまり意味がありません。明示的なキーワードは、コンパイラが選択した構造を外部の型から保護するためのものだと思いました。
これは許されますか?もしそうなら、それはどういう意味ですか?
c++ - 文字列定数から 'char*' への C++ 非推奨の変換
私はクラスを持っていますprivate char str[256];
そのために、明示的なコンストラクターがあります。
私はそれを次のように呼びます:
これをコンパイルすると、次の警告が表示されます。
文字列定数から「char*」への非推奨の変換
なぜこうなった?
c++ - デフォルト値を持つ単一の引数コンストラクターは、暗黙的な型変換の対象になりますか?
単一の引数コンストラクター、または最初の引数のみにデフォルト値がない複数の引数を持つコンストラクターで発生する可能性のある暗黙的な型変換を回避するための明示的なキーワードの使用を理解しています。
しかし、私は疑問に思っていました。暗黙の変換に関しては、デフォルト値を持つ単一の引数コンストラクターは、デフォルト値がないものと同じように動作しますか?
c++ - 明示的なデフォルトコンストラクタの目的
最近、明示的なデフォルトコンストラクターを必要とするC++0xのクラスに気づきました。ただし、デフォルトのコンストラクターを暗黙的に呼び出すことができるシナリオを思い付くことができません。それはかなり無意味な指定子のようです。Class c;
多分それは賛成することを許さないだろうと思っClass c = Class();
たが、そうではないようだ。
C ++ 0x FCDからのいくつかの関連する引用は、ナビゲートしやすいためです[同じ場所にない場合でも、同様のテキストがC++03に存在します]
12.3.1.3 [class.conv.ctor]
デフォルトのコンストラクターは、明示的なコンストラクターの場合があります。このようなコンストラクターは、デフォルトの初期化または値の初期化(8.5)を実行するために使用されます。
明示的なデフォルトコンストラクターの例を引き続き提供しますが、上記で提供した例を模倣しているだけです。
8.5.6 [decl.init]
デフォルトで-タイプTのオブジェクトを初期化するということは、次のことを意味します。
— Tが(おそらくcv修飾された)クラスタイプの場合(第9節)、Tのデフォルトコンストラクターが呼び出されます(Tにアクセス可能なデフォルトコンストラクターがない場合、初期化は不正な形式になります)。
8.5.7 [decl.init]
タイプTのオブジェクトを値初期化するということは、次のことを意味します。
— Tがユーザー提供のコンストラクター(12.1)を持つ(おそらくcv修飾された)クラスタイプ(条項9)の場合、Tのデフォルトコンストラクターが呼び出されます(Tにアクセス可能なデフォルトコンストラクターがない場合、初期化は不正な形式になります) );
どちらの場合も、標準ではデフォルトのコンストラクターが呼び出される必要があります。しかし、それは、デフォルトのコンストラクターが非明示的である場合に起こることです。完全を期すために:
8.5.11 [decl.init]
オブジェクトに初期化子が指定されていない場合、オブジェクトはデフォルトで初期化されます。
私の知る限り、これはデータなしからの変換を残すだけです。これは意味がありません。私が思いつくことができる最高のものは次のとおりです。
しかし、明らかにそれはC++がデフォルトの引数を処理する方法ではありません。他に何がexplicit Class();
違う振る舞いをするのでしょうClass();
か?
この質問を生成した特定の例は、std::function
[20.8.14.2func.wrap.func]でした。いくつかの変換コンストラクターが必要であり、いずれも明示的にマークされていませんが、デフォルトのコンストラクターはです。
c++ - C++での明示的代入と暗黙的代入の違いは何ですか
それらの違いは何ですか?また、明示的割り当てと暗黙的割り当てはどのような場合にどのように異なりますか?
http://weblogs.asp.net/kennykerr/archive/2004/08/31/Explicit-Constructors.aspx
編集:私は実際にこの記事を見つけました。これにより、全体がはるかに明確になります...そして、プリミティブ型の単一のパラメーター(numeric / bool / string)をとるコンストラクターを(一般的に)マークする必要がある場合は、別の質問が発生します明示的にし、残りはそのままにしておきます(もちろん、(int, SomeType = SomeType())
?のようなコンストラクターなどの落とし穴に注意してください。
c++ - 明示的なコピーはありますか
次のような構文を探しています。
言い換えれば、コピーコンストラクターが明示的であっても、メソッドがコピーを返すことができるように、明示的なコピー構文を探しています。
GCC 4.4.5 を使用しています。
どうもありがとう、
チャーリー
c++ - いつ直接初期化を使用し、いつコピー初期化を使用する必要がありますか?
それは単に好みですか、それとも特定のインスタンスが必要な場合がありますか? 初期化のために次のバリアントを参照しています