2016-08-14 5 views
-1

C++에서 "return 4,5"를 사용하면 오류가 발생하지 않고 대신 5를 반환합니다 (처음 발생하는 숫자가 반환되어야하므로 4를 이해할 수 있습니다). 왜 이런 일이 일어나고 어떤 식 으로든 2 개의 값을 반환하는 데 사용할 수 있습니까? 여기 a, b 및 왜 반환합니까?

내가 대신 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++은 내장되어 있지 않습니다 tuple (같은 int, double 등)을 입력, 그래서, 함수에서 하나 개 이상의 값을 반환하는 것은 불가능합니다. 하지만,

#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; 
} 

이 두 변수에 대한 약간의 오버 헤드는 다음과 같습니다 그러나 std::tie 기능을 사용하여 압축을 해제 한 후 래퍼 형 std::tuple을 사용할 수 있습니다.

+0

또는 'auto [a, b] = something();':-) –

+0

@KerrekSB : 음? –

+0

@ LightnessRacesinOrbit : 그건 C++ 17 ... –

2

그것은 이러한이기 때문에 (내장 콤마 연산자를 사용하고 사용자 정의 유형이 아님). 사용자 정의 유형의 경우 operator,() (쉼표 연산자)을 호출합니다.

쉼표 연산자는 연산자의 양쪽을 평가하고 후자의 결과를 반환합니다. 그래서 결과가 4가 아닌 5를 얻습니다.

에 관해서는 왜이라고 말 할 수는 없지만 어리석은 것처럼 보입니다.

+1

이것은 내장형의 값이기 때문에'operator()'를 호출하지 않습니다. 그것은 쉼표 연산자이지만 어떤 연산자()도 호출하지 않습니다. –

+0

해당 코드에 대해 함수가 호출되지 않습니다. –

+0

좋아요, 알았어,이 경우 기본 내장 쉼표 연산자를 사용하고 있지만 세부 사항입니다. –

1

두 값을 반환하려면 std::vector을 반환하십시오. 어쩌면 std::pair 또는 수업 일 수 있습니다. C++이 작동하는 이유는 무엇입니까? 쉼표는 + 또는 -와 같은 연산자입니다. 왼쪽 피연산자를 버리고 오른쪽 피연산자를 반환합니다. return은 함수에서 해당 표현식의 값을 반환합니다. 나머지는 당신이 알아낼 수 있습니다.

+2

쉼표 연산자도 왼쪽 피연산자를 평가합니다 * –

관련 문제