const 참조 매개 변수
다음 선언간에 차이점이 있습니까?
void somefunc(const Person &p);
void somefunc(Person const &p);
차이 가 없습니다 . const
오른쪽에 바인딩하는 선언의 첫 번째 부분이 아니라면 왼쪽에 형식에 바인딩합니다.
참조 : https://isocpp.org/wiki/faq/const-correctness#const-ref-alt
개인적으로 나는 그것이 const T &x
더 잘 읽는다 는 것을 안다 . 에 따르면 이 , 비얀도 넣어 선호 const
첫째. 특히 키워드가 원래 호출 readonly
되고 readonly int x
더 잘 읽을 수 있기 때문에 :-P.
네, 있습니다! 첫 번째는 더 읽기 쉽습니다. :)
참조이
http://www.parashift.com/c++-faq-lite/const-correctness.html
(대신 새 링크 참조 : https://isocpp.org/wiki/faq/const-correctness#const-ref-alt )
특히 18.6 ~ 18.8.
[18.6] "const Fred & x"는 무엇을 의미합니까?
x 별칭은 Fred 객체이지만 x는 Fred 객체를 변경하는 데 사용할 수 없습니다.
[18.7] "Fred & const x"가 말이 되나요?
아니, 말도 안돼.
[18.8] "Fred const & x"는 무엇을 의미합니까?
Fred const & x는 기능적으로 const Fred & x와 동일합니다. 그러나 진짜 질문은 어떤 것을 사용해야 하는가입니다.
자세한 내용은 기사의 나머지 부분을 읽어보십시오. 그러나 본질적으로 동등하다고 말하며 적합하다고 생각되는대로 둘 중 하나를 사용할 수 있습니다. 그러나 미래의 혼란을 피하기 위해 하나를 선택하고 계속 사용해야합니다.
정말 맛의 문제입니다.
오른쪽에서 왼쪽으로 Person const & x
읽으면 ""는 "x는 상수 Person에 대한 참조입니다."라고 읽습니다.
이것은 " const Person & x
" 보다 낫습니다. " x는 사람에 대한 참조이며 상수입니다."
따라서 변수 선언의 오른쪽에서 왼쪽으로 읽는 방향에 익숙하다면 아마도 첫 번째 것을 선호 할 것입니다.
둘 다 동일합니다.
const Person & x는 현재 가장 인기가 있습니다. 영어는 명사 앞에 형용사를두기 때문에 "더 많은 영어를 좋아합니다".
대체 형식 인 Person const & x는 덜 관용적 인 형식으로 제안되었습니다. 그들의 주장은 그 형식이 항상 오른쪽에서 왼쪽으로 구문 분석 될 수 있다는 것이 었습니다. "x는 const Person에 대한 참조입니다." 그 주장은 구문 분석의 명확성이 관용적 구조보다 더 중요하다는 것입니다.
불행히도 그 사람들에게는 그들의 형태가 모든 것을 다룰 수는 없습니다. 배열과 함수 포인터 및 기타 이국적인 형식을보기 시작하면 규칙이 무너지기 시작합니다. char * str [10]은 배열이 오른쪽에 있어야하므로 오른쪽에서 왼쪽 형식으로 쓸 수 없습니다. void (* signal (int, void (* fp) (int))) (int)는 오른쪽에서 왼쪽으로 사람들이 고통을 느끼게합니다.
모든 유형, 시계 방향 나선형 규칙을 이해하기 위해 규칙 만 잘 렸습니다. http://c-faq.com/decl/spiral.anderson.html
일반적으로 누군가 시계 방향의 나선형을 보면 명확한 구문 분석 규칙에 대한 모든 희망이 사라집니다. 대부분의 사람들은 const Person & x가 아마도 가장 좋은 방법이라는 것을 받아들입니다!
참고 URL : https://stackoverflow.com/questions/1035795/const-reference-parameters
'Development Tip' 카테고리의 다른 글
npm WARN notsup 건너 뛰기 선택적 종속성 : fsevents@1.0.14에 대해 지원되지 않는 플랫폼 (0) | 2020.10.23 |
---|---|
모든 리전에서 실행중인 모든 Amazon EC2 인스턴스를 보려면 어떻게해야합니까? (0) | 2020.10.23 |
Java URLConnection의 사용자 에이전트 설정 (0) | 2020.10.23 |
MySQL WHERE : "! ="또는 "같지 않음"을 작성하는 방법은 무엇입니까? (0) | 2020.10.23 |
기간을 int milli 및 float 초로 가져 오는 방법 (0) | 2020.10.23 |