[過去ログ] C++相談室 part157 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
475(3): 2021/10/05(火)17:00 ID:YgA3J5wy(1) AAS
関数の引数に参照渡しで何も渡さないようにするはどうすればよいですか
自作クラスAがあったとして、それを引数にとる関数
void hoge(int& p1, A& p2)
があります。
ただ、p2は、ケースによっては要らない場合もあって、その場合にはどうすればよいですか。
調べてみたらnullptrみたいなのはあったので、
int p1 = 1;
hoge(p1, nullptr);
と書いてみても、
非constの左辺が何とかとエラーが出て、渡せませんでした。
477(1): はちみつ餃子 ◆8X2XSCHEME 2021/10/05(火)17:41 ID:krkmojOq(1/3) AAS
>>475
参照は何も参照していない状態というのは作れない。
参照で受け取るように書いてあればその参照が無効ということはあり得ないという表明として解釈するのが通例。
(実際にはダングリング参照はあり得るけどそれは単に間違ったプログラムなので気にしない。)
引数として不要なのであればオーバーロードで引数が不要な関数も用意するのが真っ当な方法だけれど、
どうしても無効ということを表す状態を渡したいということであればダミーのオブジェクトを作っておいて
それを無効の意味に使うという方法は考えられる。 (不格好だけど……。)
#include <iostream>
struct A {};
A dummy;
省11
498(1): 2021/10/06(水)08:17 ID:fON1wZ9Y(1) AAS
>>475
普通はオーバーロードだな。デフォルトを指定させたいのならnullobjectを始めとする定数オブジェクトかね。
nullポインタとか空のスマートポインタとかはエラーの元だから避けたいところ。
499: 2021/10/06(水)08:26 ID:E9G/hK4q(4/4) AAS
>>497
自己レスです
いずれにしても呼び出し元を変更せずに要件を満たせそうな唯一の方法っぽいので解決ですね
(私は>>475ではありません)
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.447s*