생성자의 초기화 목록: 멤버 변수와 이름 겹침
생성자 인수와 동일한 이름을 사용하여 멤버 변수를 초기화하는 관행은 의문을 제기했습니다. 유효성과 C 표준 준수에 대해 설명합니다. 이 관행에 대한 표준의 관점을 살펴보겠습니다.
C 표준 §12.6.2/7에 따르면 멤버 이니셜라이저의 표현식 목록에 있는 표현식은 생성자의 범위 내에서 평가됩니다. 따라서 생성자 인수와 멤버 변수 모두에 동일한 이름을 사용하는 것이 명시적으로 허용됩니다.
예를 들어 다음 코드 조각은 C 표준을 완전히 준수합니다.
class Blah { std::vector<int> vec; public: Blah(std::vector<int> vec): vec(vec) {} // ... };
In 이 경우 생성자 인수 vec는 모호함 없이 멤버 변수 vec를 초기화하는 데 사용됩니다.
게다가 표준에서는 멤버 초기화 프로그램에서 this 포인터를 사용하여 초기화되는 개체를 참조하는 것을 허용합니다. 이를 통해 다음 예와 같이 다른 멤버 변수를 기반으로 멤버 변수를 초기화할 수 있습니다.
class X { int a; int b; int i; int j; public: X(int i): r(a), b(i), i(i), j(this->i) {} // ... };
그러나 생성자 매개변수를 const 참조로 전달하면 다음과 같은 작업을 방지하여 코드 효율성을 높일 수 있다는 점에 주목할 가치가 있습니다. 원본 벡터 객체를 불필요하게 복사합니다. 이는 다음과 같이 생성자를 수정하여 달성할 수 있습니다.
Blah(const std::vector<int> &vec): vec(vec) {}
위 내용은 C에서 생성자 인수와 멤버 변수 이름이 겹칠 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!