2011-07-26 3 views
12

여기에는 두 가지 관련 질문이 있습니다.C++ : enum을 값 또는 const 참조로 전달하는 것이 더 좋습니까?

가) enum은 어떻게 구현됩니까? 예를 들어 코드가있는 경우 :

enum myType 
{ 
    TYPE_1, 
    TYPE_2 
}; 

실제로 어떤 현상이 발생합니까? 나는 당신이 TYPE_1과 TYPE_2를 int로 취급 할 수 있다는 것을 알고 있지만 실제로는 int입니까?

B) 그 정보를 기반으로, 전달 된 enum이 변경 될 필요가 없다고 가정하면 myType을 값 또는 const 참조로 함수에 전달하는 것이 더 적합할까요? 더 나은 선택 예컨대

:

void myFunction(myType x){ // some stuff } 

또는

void myFunction(const myType& x) { // some stuff } 

답변

11

속도는 거의 중요하지 않습니다. 괜찮은 C++ 컴파일러는 단 하나의 int를 전달하려고합니다.

중요한 점은 가독성입니다. 그러면 독자가 코드를 더 분명하게 보일 것입니다.

이 열거 형이 실제로는 int 일 경우 분명 int 값처럼 전달할 것입니다. const ref를 사용하면 프로그래머가 두 번 생각할 수 있습니다. 결코 좋은 생각이 아닙니다.

그러나 나중에 클래스로 바꾸려면 API를 동일하게 유지하고 const-nness를 적용하는 것이 좋습니다. .

0

패스 내장 값

의한 단순 유형 (문자, 단락, INT, ENUM 플로트 포인터)

열거 형은 정수로 구현되므로 명시 적으로 값을 지정할 수도 있습니다.

0
typedef enum 
{ 
    FIRST_THING, 
    SECOND_THING 
} myType; 

그런 다음 int와 똑같이 사용하십시오. 값으로 전달하십시오.

1

TYPE_1 및 TYPE_2을 (를) int로 처리 할 수 ​​있지만 실제로는 int 일 뿐이라는 것을 알고 있습니다.

예. 그것들은 정수형이며 가장 자연스러운 유형이기 때문에 그들의 유형은 단지 int입니다. 그래서 가치있게 전달할 수 있습니다. 참조로 전달해도 큰 이점은 없습니다. 참조 용 그런데

, 섹션 §7.2/5 말한다

열거의 기본 유형은 이 열거 형에 정의 된 모든 열거 값을 나타낼 수있는 중요한 유형이다. 그것은 인 구현 정의 일체형이 열거의 값이 INT 또는 부호 INT에 맞지 않는 한 기본 타입 INT 초과 지지 않는다는 것을 제외하고 열거위한 기본 형태로 사용된다. 열거 자 목록이 비어있는 경우 기본 형식 은 열거 형에 값이 0 인 단일 열거자를 가진 것과 같습니다.열거 형, 열거 형 또는 열거 형 개체에 적용되는 sizeof() 값은 이며 기본 형식에 적용되는 sizeof() 값은 입니다.

8

C++ 표준 (§ 7.2/5)는 열거의 기본 형태가 열거에 정의 된 모든 열거 된 값을 표현할 수있는 일체형임을 보장한다. 따라서 값으로 전달하고 코드를 더 정교하게 만들지 마십시오.

관련 문제