NULLポインタへの参照を返していいのか – プログラミング – Home

NULLポインタへの参照を返していいの...
 
通知
すべてクリア

[解決済] NULLポインタへの参照を返していいのか


C++初心者
 C++初心者
(@C 初心者)
ゲスト
結合: 21年前
投稿: 30
Topic starter  

NULLポインタへの参照って、そのポインタにアクセスしなければOKなのでしょうか?

例えば

int &GetRef()
{
static int *p = NULL;
return *p;
}

int main()
{
int &i = GetRef();

if(&i == NULL){ // <- これはOKなのか
cout << i は 何も指していない << endl;
}

return 0;
}

上のコード、一応 i は 何も指していない と表示されます。
こういう使い方はOKなのでしょうか?
というのも参照を返したい関数で、たまたま参照する物がない場合に
NULLへの参照を返して、戻り値のアドレスをチェックすればいちいちポインタ返しに
しなくてもいいのではないかと思ったのですが、どうなのでしょう・・・?


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

> NULLポインタへの参照って、そのポインタにアクセスしなければOKなのでしょうか?

規格はだめだと言っています。
ISO/IEC 14882:2003 8.3.2 Reference / 4
>A reference shall be initialized to refer to valid object or function.

> というのも参照を返したい関数で、たまたま参照する物がない場合に
> NULLへの参照を返して、戻り値のアドレスをチェックすればいちいちポインタ返しに
> しなくてもいいのではないかと思ったのですが、どうなのでしょう・・・?

ポインタを最初から返せばよいような……。
ポインタを返したくないのは何故でしょう。


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

ちゅーか、参照ってのはポインタの「どこを指しているかわからない、どこも指してい
ないかもしれない」っていう欠点を取り除くために、「必ず指し示す先が存在する」っ
ていうことを保証するために使うものだと思ってましたが。
どこも指していないなら、なぜ参照を使うのかと…。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 23年前
投稿: 310
 

何か、本末転倒のような気がします。

ポインタの指し示す先がない(無効)かどうかを検査するためにNULLを使っているのに、
アドレス演算子を使って、とかで、なんか、余計わずらわしそう。


返信引用
塗り壁
 塗り壁
(@塗り壁)
ゲスト
結合: 21年前
投稿: 1
 

>というのも参照を返したい関数で、たまたま参照する物がない場合に

参照の意味が分かっていない。


返信引用
C++初心者
 C++初心者
(@C 初心者)
ゲスト
結合: 21年前
投稿: 30
 

えーとですね、ます参照を返すのは基本クラスのインターフェースがそうだからです。
別にポインタを返したくないのではなく、返せないのです。

NULLへの参照はイレギュラーなのは理解しました。
といわけで問題解決です、皆さんありがとうございます。


返信引用
C++初心者
 C++初心者
(@C 初心者)
ゲスト
結合: 21年前
投稿: 30
 

チェック忘れました


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

基本クラス側でインターフェイスのみを定義したいのであれば、
純粋仮想にすれば、良いのでは?

純粋仮想にすると派生側での実装が強制されますが、
これが困ると言うならポインターで返却するようにすべきでしょうね。

あと、こういうことは最初に書いておきましょうね。
そうすれば違った返答も期待できたと思いますよ。


返信引用
信じられない
 信じられない
(@信じられない)
ゲスト
結合: 21年前
投稿: 1
 

> int &GetRef()
> {
> static int *p = NULL;
> return *p;
> }

> int main()
> {
> int &i = GetRef();
>
> if(&i == NULL){ // <- これはOKなのか
> cout << i は 何も指していない << endl;
> }
>
> return 0;
> }

意味不明のまま解決がチェックされちゃったけど
こんな & の書き方めちゃくちゃでしょ。ありえない


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

> こんな & の書き方めちゃくちゃでしょ。ありえない
なんで?
まったく正当やないの?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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