[解決済み】C++で関数にオブジェクトを渡すには?
2022-04-02 22:17:17
質問
私はC++プログラミングの初心者ですが、Javaの経験はあります。C++でオブジェクトを関数に渡す方法について教えてほしいのですが。
ポインタや参照、あるいは非ポインタや非参照の値を渡す必要があるのでしょうか?Javaでは、オブジェクトへの参照を保持する変数だけを渡すので、そのような問題はないと記憶しています。
それぞれのオプションの使用箇所も説明してもらえるとありがたいです。
どのように解決するのですか?
の経験則 C++11:
パス 値で ただし、以下の場合は除きます。
-
の場合、オブジェクトの所有権は必要なく、単純なエイリアスで十分です。
で渡す。
const
参照 , -
は、オブジェクトを変異させる必要があります。
で渡す。
const
lvalue参照 , -
派生クラスのオブジェクトを基底クラスとして渡す場合、その場合は
参照渡し
. (によって渡すかどうかは、前の規則を使用してください)。
const
を参照するかどうかです)。
ポインタによる受け渡しは、事実上お勧めできません。オプションのパラメータは
std::optional
(
boost::optional
で、エイリアシングは参照によってうまく行われます。
C++11の移動セマンティクスは、複雑なオブジェクトであっても、値による受け渡しと返しをより魅力的なものにします。
に関する経験則 C++03:
引数を渡す
で
const
参照
ただし、以下の場合は除きます。
-
は、関数内部で変更され、その変更が外部で反映されるべきものです。
で渡す。
const
参照 -
この場合、ポインタで渡すことになります。
NULL
/0
/nullptr
の代わりに、先ほどのルールを適用してください。 へのポインタを渡します。const
引数 - は、組み込み型であり、これは コピーで渡す
- は、関数内部で変更されるものであり、そのような変更は ない が外に反映されます。 コピーで渡す (別の方法として、前の規則に従って渡し、関数の内部でコピーを作成することもできます)
(ここで、"pass by value" は "pass by copy" と呼ばれます。C++03 では値による通過は常にコピーを作成するためです)
この他にもいろいろありますが、このいくつかの初歩的なルールでかなり遠くまで行けると思います。
関連
-
[解決済み】'cout'は型名ではない
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] メンバーデータにはポインタとリファレンスのどちらを使うべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】Enterキーを押して続行する
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。