int f( int &p ) { return p = !p; }
struct X {
constint i;
X( int i ) : i( i ) {}
X( X& x ) : i( f(x.i) ) {}
};
voidOnStart()
{
X x1( 1 );
constint i = x1.i;
{ X x2 = x1; }
Print( i == x1.i ); //Результат: false - не может быть
}
template <typename T>
T GetMe( const T Ptr )
{
return((T)Ptr);
}
class A
{
public:
int i;
};
voidOnStart()
{
const A a;
GetMe(&a).i = 1;Print(a.i); // 1
}
b3095ではスクリプトを実行しています。
オーバーロード f1(T* & Ptr) を削除すると,5コールとも void f1<const X>(const X*const) を返します.
これは何かの機能なのでしょうか?
説明してください。
1*行目でコンパイラーエラーが発生する - 予想通り。
しかし、行*2*はコンパイルして問題なく動作します。なぜ?
説明してください。
1*行目でコンパイラーエラーが発生する - 予想通り。
しかし、行*2*はコンパイルして問題なく動作します。なぜ?
明確な矛盾(const値を変更したこと)を示す必要があります。
そして、経験豊富なユーザーと開発者の両方が推測 することを提案しています。バリューチェンジ
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5言語の特徴、微妙なニュアンスとコツ
私の 考えは、mql5をFXの取引システムとして、自分の練習に使いたい。
クラスの constオブジェクトの フィールドを変更したり、その const でないメソッドを呼び出したりすることは可能ですか?-できる!私はこのチップは好きではありません。不正アクセスに対する保険に加入していると思っていた。悔しいけど!もちろん、const構造ではうまくいきません。だから、この抜け道は覚えておいてほしい。
明確な矛盾(constの値を変更したこと)を示す必要があります。
そして、経験豊富なユーザーの推測と 開発者の両方が提案します。しかし、この例では、const TをTに明示的に(関数で)変換しています。つまり、「合法化」された抜け道です。
((A*)(&a)).i = 1;
同様に - (const A*) A* に変換する。
((A)a).i = 1;
あなたの例では、明示的にconstをnon constに変換しています。