Development Tip

const 참조 매개 변수

yourdevel 2020. 10. 23. 19:10
반응형

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

반응형