IT박스

C ++ : 유형 지정자 전후 대 const 참조

itboxs 2020. 7. 3. 20:42
반응형

C ++ : 유형 지정자 전후 대 const 참조


다음과 같은 주장의 차이점은 무엇입니까?

int foo1(const Fred &arg) {
...
}

int foo2(Fred const &arg) {
...
}

? 이 사례는 초고속 FAQ에서 다루지 않습니다.


&와 관련하여 const를 오른쪽에서 왼쪽으로 읽는 것과의 차이 는 없으므로 둘 다 불변의 Fred 인스턴스에 대한 참조를 나타냅니다.

Fred& const참조 자체는 불변이며, 이는 중복 됨을 의미합니다 . 를 처리 할 때 const를 포인터 모두 Fred const*Fred* const유효하지만 다릅니다.

그것은 스타일의 문제이지만 const 멤버 함수를const 포함하여 일관되게 적용 할 수 있기 때문에 접미사로 사용하는 것을 선호 합니다 .


행동

const T&사이에는 의미 상 차이가 없습니다 T const&. 언어는 그것들을 같은 유형으로 취급합니다. (같은 일이에 적용 const T*하고 T const*.)

스타일의 문제

그러나 당신이 문체 적으로 선호 해야하는 것에 관해서는, 나는 많은 다른 답변에서 반대 의견을 제시하고 const T&(및 const T*)를 선호합니다 :

  • const T&Stroustrup의 The C ++ Programming Language 책에 사용 된 스타일 입니다.
  • const T& C ++ 표준 자체에서 사용되는 스타일입니다.
  • const T*K & R의 The C Programming Language에서 사용 된 스타일 입니다.
  • const T* C 표준에서 사용되는 스타일입니다.
  • 때문에 위의 요인으로 생각 const T&/ const T*보다 훨씬 더 관성이 T const&/가 T const*. const T&/ 내가 본 모든 C ++ 및 C 코드에서 / const T*보다 경험적으로 나에게 더 일반적인 것 같습니다 . 나는 일반적인 관행을 따르는 것이 오른쪽에서 왼쪽으로 구문 분석 규칙을 독단적으로 준수하는 것보다 더 읽기 쉽다고 생각합니다.T const&T const*
  • 를 사용 T const*하면 *as 를 잘못 배치하는 것이 더 쉽습니다 T* const(특히 사람들이 익숙하지 않은 경우). 반대로, const* T올바른 구문은 아닙니다.

오른쪽에서 왼쪽으로 구문 분석 규칙은 어떻습니까?

사람들이 사용하기를 좋아하는 오른쪽에서 왼쪽으로의 파싱 논쟁에 관해서는 다른 답변에 대한 주석에서 언급했듯이 const T&오른쪽에서 왼쪽으로도 잘 읽습니다. T 상수에 대한 참조입니다. "T"와 "constant"는 각각 형용사 나 명사로 사용할 수 있습니다. (또한, 읽기, T const*오른쪽에서 왼쪽은 잘못 "포인터 상수로 해석 될 수 있기 때문에 모호 할 수 있습니다 대신"포인터로 T " 상수 T".)


C와 C ++ 선언 구문 분석에 대한 RIGHT-LEFT 규칙 과 일관성을 유지하기 위해 하나와 동일하지만 작성하는 것이 좋습니다.Fred const &arg

선언, 한정자 및 선언자에 대한 이해를 높이 려면 내용도 참조하십시오 .


둘 다 작동하며 여기 에 쓴 사람의 설명이 있습니다.
그를 인용하려면 :

왜? "const"(처음에는 "readonly"로 이름이 지정되고 해당 "writeonly"가 있음)를 발명했을 때, 모호함없이 그렇게 할 수 있었기 때문에 유형 전후에 들어갈 수있었습니다.


차이점 없습니다 . 구문 적으로나 의미 적으로 동일합니다.


차이가 없다 http://c-faq.com/ansi/constptrconst.html


참조는 포인터와 같은 방식으로 작동하지 않습니다. 포인터의 경우 'const 포인터'( type * const p) 및 '포인터에 대한 포인터'( const type * p또는 type const * p)를 가질 수 있습니다 .

그러나 참조에 대해서는 이것을 가지고 있지 않습니다. 참조는 항상 동일한 객체를 참조합니다. 그런 의미에서 '참조'는 'const reference'( 'const pointer'를 가질 수있는 것과 같은 방법)라고 생각할 수 있습니다.

따라서 'type & const ref'와 같은 것은 합법적이지 않습니다. '타입에 대한 참조'( type &ref) 및 '상수 타입에 대한 참조 '만 가질 수 있습니다 ( const type &ref또는 type const &ref; 둘 다 정확히 동일 함).

마지막으로 const type, 영어로 발음이 더 정확하다고 해도 쓰기 type const는 "오른쪽에서 왼쪽으로"선언에 대한 체계적인 이해를 int const & ref가능하게합니다. 'ref는 상수 int에 대한 참조'입니다. 또는 더 복잡한 예 : int const * const & refref는 상수 int에 대한 상수 포인터에 대한 참조입니다.

결론 : 귀하의 질문에, 둘 다 정확히 동일합니다.

참고 URL : https://stackoverflow.com/questions/3694630/c-const-reference-before-vs-after-type-specifier

반응형