2016-08-14 8 views
-1

C++で "return 4,5"を使用すると、エラーは発生せず、代わりに5が返されます(最初の数値が返されるため、少なくとも4がわかります)。なぜこれが起こるのですか?これを使って2つの値を返すことができますか?ここ返品a、b、および理由は何ですか?

は、これらがあるので、私はいくつかの理由5に関する上記のコードでも

#include<iostream> 
using namespace std; 
int something() 
{ 
    return 4,5; 
} 
int main() 
{ 
    int a=0,b=0; 
    a,b = something(); 
    cout<<a<<b<<endl; 
} 

を試みたコードは、それが(ビルトインコンマ演算子を使用してい

+0

_「遭遇する最初の番号を返す必要があります」_それはなぜですか? –

答えて

3

これはカンマ演算子の動作方法です。すべてのオペランドを評価し、最後のものを返します。

残念ながら、C++にはtupleint,doubleなど)タイプが組み込まれていないため、関数から複数の値を返すことはできません。しかし、あなたがラッパー型std::tupleを使用して、std::tie機能を使用して、それを解凍できます。

#include <iostream> 
#include <tuple> 

std::tuple<int, int> something() 
{ 
    return {1, 2}; 
} 

int main() 
{ 
    int a=0, b=0; 
    std::tie(a, b) = something(); 

    std::cout << a << b << std::endl; 
} 

これは、しかし、2つの変数のための少しのオーバーヘッドです。

+0

または、おそらく 'auto [a、b] = something(); ':-) –

+0

@KerrekSB:うん? –

+0

@LightnessRacesinOrbit:それはC++ 17 ... –

2

の代わりにbに割り当てられていますユーザー定義型ではありません)。ユーザー定義型の場合は、operator,()(コンマ演算子)を呼び出します。

カンマ演算子は、演算子の両辺を評価し、後者の結果を返します。だからこそ、結果として5を得て4を得ないのです。

については、なぜと言われているのでしょうか。

+1

組み込み型の値であるため、最も確かに 'operator()'が呼び出されていません。これはコンマ演算子ですが、間違いなく 'operator()'を呼び出すことはありません。 –

+0

問題のコードに対して関数が呼び出されていません。 –

+0

これはデフォルトの組み込みコンマ演算子を使用していますが、詳細です。 –

1

2つの値を返す場合は、std::vectorを返します。たぶんstd::pair、またはクラス。これまでのところ、これはC++の仕組みです。カンマは、+や - のような単なる演算子です。左のオペランドを破棄し、正しいオペランドを返します。 returnは、その式の値を関数から返します。残りはあなた自身を理解することができます。

+2

コンマ演算子も左のオペランドを評価します* –

関連する問題