XE2には、参照渡しのDelphi相当のC++パスがありますか? C++のコードは次のようになります。Delphiのconstへの参照渡し
void passByRef(const MyClass& param);
XE2には、参照渡しのDelphi相当のC++パスがありますか? C++のコードは次のようになります。Delphiのconstへの参照渡し
void passByRef(const MyClass& param);
void passByRef(const MyClass& param);
ここconst
あなたは、参照が参照する値を変更することはできませんと言っています。
MyClass
がDelphiクラスにマップされていると仮定すると、同等のものはありません。 Delphiでは、クラスは参照型です。これは、関数はparam
の値を変更することが許可されていないことを意味し
procedure Foo(const param: TMyClass);
:あなたはこのようconst参照を渡すことができます。
param := ...; // this would result in a compilation error
しかし、この方法はparam
が参照するオブジェクトを変異させることができます。
param.DataMember := ...; // compiles
param.SomeProperty := ...; // compiles
param.MutateObject(); // compiles
デルファイは、このような側面がC++で利用可能なconst
に存在しません。
代わりにクラスではなくレコードにマップされていた場合は、状況は少し異なります。次に、あなたが持っていると思います:
procedure Foo(const param: TRecord);
をもう一度あなたがparam
に割り当てることができませんでしたが、これは値型ですので、あなたも直接param
のいずれかのデータメンバを変更することが防止されます。
param.DataMember := ...; // does not compile, for TRecord being a record
コンパイラは、内部状態を変更するレコードに対してメソッドを呼び出すのを止めません。これは私の見解では見落としのようなものですが、言語設計者がそのツールを使用しないようにするのは難しいです。繰り返しますが、C++の設計は、この領域ではより豊かであり、細かい粒度指定が可能です。
このため、レコードの状態を変更するインスタンスメソッドを持つレコードタイプを記述しないことを強くお勧めします。