参照型引数の実装 – プログラミング – Home

通知
すべてクリア

[解決済] 参照型引数の実装


kumo
 kumo
(@kumo)
ゲスト
結合: 22年前
投稿: 14
Topic starter  

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++等)でも同じ実装なのでしょうか?


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

少なくとも言語仕様はそれを保証していません。


返信引用
kumo
 kumo
(@kumo)
ゲスト
結合: 22年前
投稿: 14
Topic starter  

なるほど。
ということはDLLのエクスポート関数には
参照引数は使わないほうがいいのでしょうか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

DLLと、それを利用する側とが同じ処理系で
コンパイルされたものであるなら、構わんと
思います。


返信引用
kumo
 kumo
(@kumo)
ゲスト
結合: 22年前
投稿: 14
Topic starter  

VC++以外でも開発する可能性があるので、今回は参照を使わないことにしました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました