IT이야기

결과 주변의 괄호들은 반품 명세서에서 중요한가?

cyworld 2022. 4. 25. 21:45
반응형

결과 주변의 괄호들은 반품 명세서에서 중요한가?

함수 안에 있는 이 두 문장 사이에 차이가 있는가?

bool returnValue = true;
// Code that does something
return(returnValue);

그리고 이것은?

bool returnValue = true;
// Code
return returnValue;

전자는 괄호를 가지고 있다.returnValue.

C++14일 현재, 그들은 종종 있다.

C++14는 반환 값 주위의 괄호가 의미론을 바꿀 수 있는 가장자리 케이스를 추가한다.이 코드 조각은 선언되고 있는 두 가지 함수를 보여준다.유일한 차이점은 반환 값 주변의 괄호다.

int var1 = 42;
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1)
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))

에에func1a를 반환하다.int그리고 두 번째에func1a를 반환하다.int&의미론의 차이는 주변 괄호들과 직접적으로 관련이 있다.

auto그것의 최신 형태의 지정자는 C++11에 도입되었다.C++ Language Spec에서는 다음과 같이 설명된다.

선언할 변수의 유형을 초기화기에서 자동으로 추론하도록 지정한다.함수의 경우, 반환 형식이 후행 반환 유형이거나 반환 문에서 추론되도록 지정(C++14 이후)

로 C은 C++11 했다.decltypeC++ 언어 사양에 설명된 지정자:

선언된 엔터티 유형을 검사하거나 식의 반환 형식을 쿼리하십시오.

[스냅]

  1. 만일 인수가 개체/함수의 부모화되지 않은 이름이거나 멤버 액세스 표현식(object.member 또는 pointer->member)인 경우, 선언형은 이 표현식에 의해 지정된 엔터티의 신고 유형을 지정한다.

  2. 인수가 T 유형의 다른 표현식인 경우

    a) 표현식의 값 범주가 x값인 경우, decltype은 T&&&&를 지정한다.

    b) 표현식의 값 범주가 lvalue인 경우, decltype은 T&를 지정한다.

    c) 그렇지 않으면, decltype은 T를 지정한다.

[스냅]

객체의 이름을 괄호화하면 l값 식이 되기 때문에 decltype(arg)과 decltype(arg)은 다른 유형인 경우가 많다.

에서 C++14를 할 수 있는 decltype(auto)기능 반환 형식에 대해 허용되었다.원래의 예는 괄호와의 의미적 차이가 작용하는 부분이다.원래 예제를 다시 살펴보기:

int var1 = 42;
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1)
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))

decltype(auto)함수의 후행 반품 유형을 반품 명세서의 엔티티/회사에서 추론할 수 있다.첫 번째 버전에서return var1;효과적으로 유형을 반환하는 것과 동일하다.decltype(var1)(안)int위의 규칙 1에 따라 유형 반환) 및 두 번째 경우return (var1);그것은 사실상 와 같다.decltype((var1))(안)int &규칙 2b)에 따라 유형을 반환하십시오.

괄호는 반환 형식을 만든다.int&대신에int따라서 의미론의 변화.이야기의 교훈 - "반환형의 모든 괄호가 동일한 것은 아니다"

차이가 없어!!

사람들은 복잡한 표현이 연관되어 있다면 괄호를 사용한다.

그건 그렇고.return함수가 아닌 문장이야

상기의 괄호들은 불필요하다; 그것들은 효과적으로 무시된다.

뭐랄까...

int x = (5);

여기 괄호도 무시된다.

차이가 없다.

괄호를 사용하는 한 가지 이유는 여러분이 돌아오기 전에 식을 평가하고 싶다면, 하지만 여러분의 예에서는 이유가 없을 것이다.참조:

반환 값 주위의 괄호

추후의 논의를 위하여

두 가지 다 네 경우 같다.

AFAIK, 아무것도 다르지 않다.

C++에서 표현식은 다음과 같은 형식을 가질 수 있다.expr또는(expr)그래서 후자는 타이핑이 더 많은 표현이다.이에 대한 자세한 내용은 문법을 참조하십시오("표현"을 찾으십시오).

아니, 네 코드에는 차이가 없어.

아마도boo오타가 있고, 당신은 그 사이에 차이가 있는지 묻고 있다.

return expr;

그리고

return(expr);

대답은 '아니오'이다.

아니, 표현이 읽기 쉽고 또렷하면 괄호를 넣을 수 있지만 둘 사이에는 차이가 없다.

너 컴파일러 속도를 엄청나게 늦추고 있구나!

괄호의 존재는 사전 처리 단계를 늦출 뿐만 아니라, 더 많은 메모리와 더 많은 계산이라는 더 복잡한 추상 구문 트리를 생성한다.


의미론적 관점에서?그들은 정확히 똑같다.괄호가 있는지 여부return문장은 표현식을 반환하기 전에 충분히 평가할 것이다.

그것들은 아주 똑같은 겁니다.나는 괄호 구문을 꽤 자주 보는데, 나는 항상 그것을 사용하는 사람들에게 왜?라고 묻는다.그리고 아무도 왜 그것을 사용하는지 대답할 수 없다.

단도직입적으로 요약하면, 반환표현 주변의 괄호는 함수형 매크로와 함수의 차이를 잘 파악하지 못하거나, C에서 연산자 우선 순위나 평가규칙의 순서에 대해 혼동하는 사람에 의해 사용된다.괄호 사용으로 인한 코딩 스타일의 이점은 없다.

그러므로

return value;

보다 더 정확하다

return (value)

왜냐하면 후자는 당신이 무엇을 하고 있는지 잘 모른다는 것을 암시하기 때문이다 :)

참조URL: https://stackoverflow.com/questions/4762662/are-parentheses-around-the-result-significant-in-a-return-statement

반응형