質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1046閲覧

C++で複数の戻り値を返す場合、&hogeを使うかstd::tupleを使うかどっちがいいですか

KOTTON

総合スコア47

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/05/28 15:13

質問

C++で複数の戻り値を返す場合、僕がぱっと思いつくのは引数に&hogeのようにアドレスを渡して、そこに値を埋める方法と、std::tupleと構造化束縛を使って変数を返す方法の2つです。
どちらがおすすめですか?好みの問題であれば、シンプルに皆さんの好みを教えてください。
個人的にはstd::tupleを使うほうが分かりやすくて好きなんですが、多分引数を使う方法のほうがよくつかわれる気がします。

引数を使う場合、クラスによってはmemcpyを使う必要があったり、引数に戻り値を設定するのってシンプルに分かりにくかったりすると思います。その点tupleを使って戻り値という明確な形にすることで、使う側はわかりやすいと思うのですが、どうなんでしょう

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

特に理由がなければ、複数の値でも戻り値として返した方が可読性が高くてよいです。std::tuple でも std::pair でも構造体でも構いません。

Google C++ スタイル(日本語訳) では以下のように述べられています。複数の値のときのことは特別視していません。

可読性の向上や、同等以上のパフォーマンスが得られるため、基本的には、出力用引数よりも戻り値を使用しましょう。

投稿2021/05/28 15:58

int32_t

総合スコア21008

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KOTTON

2021/05/28 19:08

ありがとうございます;; やはり戻り値のほうが分かりやすくてよいですよね!すっきりしました。ありがとうございました!
guest

0

ベストアンサー

現代的な C++ において原則としては結果は返却値 (std::tuple に限らずなんらかの集成体) で返すのがよりよい方法であり、そのための文法 (構造化束縛) が整備されているのでそれに倣うべきではあります。

ただ、それが常によいということはなく、例外としては

  • 入出力のバッファなど、メモリを使いまわすことが想定される場合
  • 共有オブジェクトの API とする場合 (様々な言語から使うことを想定すると C++ の呼出し規約をあてにはできない)

などが考えられます。

というわけで、配慮しなければならないことはありますが返却値で返す方法を優先するのは妥当な選択です。

投稿2021/05/28 16:53

SaitoAtsushi

総合スコア5466

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KOTTON

2021/05/28 19:09

ありがとうございます! 大まかに自分が考えていたことが正しかったということで、とてもすっきりしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問