C에서 컴파일러는 생성자, 할당 연산자, 그리고 소멸자. 단, 기본 항등(==) 및 부등(!=) 연산자는 생성하지 않습니다.
제외 이유
기본 항등 연산자를 제공하지 않기로 결정 이는 회원별 비교와 관련된 잠재적인 문제에서 비롯됩니다. 클래스가 메모리 할당을 처리하거나 복잡한 데이터 구조를 포함하는 경우 기본 비교로 인해 예상치 못한 결과나 잘못된 동작이 발생할 수 있습니다.
Stroustrup의 관점
C 창시자 Bjarne Stroustrup 는 자동 기본 복사 생성자에 대한 우려를 표명했습니다. 그는 복사는 프로그래머가 명시적으로 제어해야 한다고 믿으며 특정 개체 유형에 복사를 사용하는 것을 권장하지 않습니다.
프로그래머를 위한 결과
컴파일러에서 생성된 항등 연산자가 없음 이는 프로그래머가 자신의 클래스에 대해 사용자 정의 비교 함수를 작성해야 함을 의미합니다. 이러한 추가 책임은 데이터 무결성을 손상시키지 않고 복잡한 클래스를 올바르게 비교할 수 있도록 보장합니다.
예
다음 클래스를 고려하세요.
class Foo { public: std::string str_; int n_; };
비교하려면 이 클래스의 객체에 대해 프로그래머는 동등성을 구현해야 합니다. 연산자:
bool operator==(const Foo& f1, const Foo& f2) { return (f1.str_ == f2.str_ && f1.n_ == f2.n_); }
결론
C 컴파일러는 잠재적인 오류를 방지하고 객체 비교에 대한 제어를 유지하기 위해 항등 및 부등 연산자를 자동 정의하지 않습니다. 프로그래머는 클래스 인스턴스의 정확하고 안정적인 비교를 보장하기 위해 복잡한 클래스에 대한 사용자 정의 비교 함수를 정의해야 합니다.
위 내용은 왜 C 컴파일러는 동등(==) 및 부등(!=) 연산자를 자동으로 생성하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!