>백엔드 개발 >C++ >C에서 생성자 인수와 멤버 변수 이름이 겹칠 수 있습니까?

C에서 생성자 인수와 멤버 변수 이름이 겹칠 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-12 21:49:01562검색

Are Constructor Argument and Member Variable Names Allowed to Overlap in C  ?

생성자의 초기화 목록: 멤버 변수와 이름 겹침

생성자 인수와 동일한 이름을 사용하여 멤버 변수를 초기화하는 관행은 의문을 제기했습니다. 유효성과 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.