通知
すべてクリア
Topic starter
2003年7月6日 4:24 PM
DLLからエクスポートする関数の引数で疑問に思いました。
void dll_func(int&);
というような参照型引数の実装に互換性はあるのでしょうか?
void func_1(int& i)
{ cout << i++ << endl; }
void func_2(int* pi)
{ cout << (*pi)++ << endl; }
int i = 10;
func_1(i);
((void (*)(int&))func_2)(i);
((void (*)(int*))func_1)(&i);
cout << i << endl;
上記をVC++6.0でコンパイルしてみたところ、意図した通り10~13が順に表示されました。
このことからVC++では、参照型引数は内部でポインタとして実装されているとわかりました。
これは他のC++コンパイラ(Borland C++等)でも同じ実装なのでしょうか?
2003年7月6日 5:06 PM
少なくとも言語仕様はそれを保証していません。
Topic starter
2003年7月6日 5:56 PM
なるほど。
ということはDLLのエクスポート関数には
参照引数は使わないほうがいいのでしょうか?
2003年7月6日 8:45 PM
DLLと、それを利用する側とが同じ処理系で
コンパイルされたものであるなら、構わんと
思います。
Topic starter
2003年7月6日 9:45 PM
VC++以外でも開発する可能性があるので、今回は参照を使わないことにしました。
ありがとうございました。