class A
{
private:
// конструктор по умолчанию недоступен
A(){}
public:
A(constdouble& value)
: m_Value(value)
{}
private:
double m_Value;
}
class B
{
public:
B()
// т.к. коструктор А не имеет конструктора по умолчанию, единственный способ// использования класса -- инициализация в списке инициализации.// по-другому просто не должно скомпилиться
: A(0)
{
}
private:
A m_Value;
}
全てはコメントに書かれています。
例2.
class A
{
public:
A()
{
Init(0);
}
A(constdouble& value)
{
Init(value);
}
void Init(doublevalue)
{
// очень тяжелая функция
}
};
class B
{
public:
// вариант1, правильный
B(constdouble& value)
: m_Value(value)
{
}
/*
// вариант2, неправильный
B(const double& value)
{
m_Value.Init(value);
}
*/private:
A m_Value;
};
ファイル名変数で上書きされた名前を取得したいのですね。
Init()が正しく動作するためには、オブジェクトを構築した後に 呼び出す必要があります。
それとも違う?
VMTはコンストラクタの終端コードでしか初期化されないので、コンストラクタでメソッドを呼び出すと、コンストラクタブルオブジェクト型ではなく、変数型のメソッドが呼び出されるのだと思います。
それは、こんな感じです。
少なくともこれは使える。
MetaQuotes: もし私が正しいのであれば、コンストラクタで仮想関数を 呼び出すことを完全に禁止した方が良いと思います。へ。
あるいは正しく動作させる。それはどうでしょう。
パラメトリックコンストラクタを知るところから。しかし、どうやら例の
ハイライトされた行の括弧の位置が正しくありません。パラメトリックコンストラクタを知るところから。しかし、どうやら例の
は、括弧が正しくありません。技術的な投稿(コンストラクタの初期化に関する小さな議論の始まり)。移動しました。新人の重い足音で迷子にならないように、https://www.mql5.com/ru/forum/58/page31#comment_66890。
初期化について質問です。原則として、文字列変数や 複雑なオブジェクトの初期 化は、「デフォルト」で自動的に行われます。そのため、コンピュータの演算能力(私は「コンピュータクロック」と呼んでいます、素人考えですみません)を一定量浪費しています。
現在は初期化リストがあり、カスタム値で変数を初期化することができます。自動初期化とカスタム値による初期化では、初期化速度に差はありますか?つまり、初期化リスト(およびカスタム値)を使用した場合、自動初期化と比べて「コンピュータのストローク数」が増えるのでしょうか?
また、数クロックサイクルを節約できたとして、大きな利得が得られるのでしょうか?特に、初期化は一度だけで、値は後から代入する必要がありますから。
個人的には、この技術を理解したいので、重要な質問です。
正しいアプローチで、すべてがそのようになる。初期化リストは、パラメトリックコンストラクタの導入に伴うものです。
2つの例を見てみましょう。
全てはコメントに書かれています。
例2.
つまり、variant 1ではInitの呼び出しが1回、variant 2では呼び出しが2回ということになります。また、「いいね!」機能は非常に重いので、アップは当然です。TheXpert さん、ありがとうございました。調べてみるよ。
文字列、動的配列、複合オブジェクト」型の変数の自動初期化と、同じ変数のユーザーによる初期化とは、速度に差がないことが、お言葉から間接的に理解できました。
文字列、動的配列、複合オブジェクト」型の変数の自動初期化とユーザーによる同じ変数の初期化との間に速度差がないことは、お言葉から暗黙のうちに理解しました。