다음과 같은 주장의 차이점은 무엇입니까?
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”를 가짐)를 발명했을 때, 나는 모호함없이 그렇게 할 수 있었기 때문에 타입 전후에 들어갈 수있었습니다.
답변
차이점 은 없습니다 . 구문 적으로나 의미 적으로 동일합니다.
답변
답변
참조는 포인터와 같은 방식으로 작동하지 않습니다. 포인터의 경우 ‘const 포인터'( type * const p
) 및 ‘포인터에 대한 포인터'( const type * p
또는 type const * p
)를 가질 수 있습니다 .
그러나 참조에 대해서는 이것을 가지고 있지 않습니다. 참조는 항상 동일한 객체를 참조합니다. 그런 의미에서 ‘참조’는 ‘const reference'( ‘const pointer’를 가질 수있는 것과 같은 방법)라고 생각할 수 있습니다.
따라서 ‘type & const ref’와 같은 것은 합법적이지 않습니다. ‘type에 대한 참조'( type &ref
) 및 ‘상수 유형에 대한 참조 ‘만 가질 수 있습니다 ( const type &ref
또는 type const &ref
; 둘 다 정확히 동일 함).
마지막으로 const type
, 영어로 발음이 더 정확하다고 해도 쓰기 type const
는 “오른쪽에서 왼쪽으로”선언에 대한 체계적인 이해를 허용합니다. int const & ref
‘ref는 상수 int에 대한 참조’입니다. 또는 더 복잡한 예 : int const * const & ref
ref는 상수 int에 대한 상수 포인터에 대한 참조입니다.
결론 : 귀하의 질문에, 둘 다 정확히 동일합니다.