2009-12-03 3 views
3

비슷한 질문이 이전에 요청되었지만 실제로는 내가 찾던 답변 중 아무 것도 제공하지 않았습니다.함수의 const 위치

const에 함수가 있어야하는 위치를 결정하는 데 문제가 있습니다. 나는 많은 사람들이 그것들을 맨 위에 놓았 음을 알고 있지만 가능한 한 가까이에두면 코드 스팬이 줄어 듭니다. 나는.

void f() { 
    const FOO = 3; 
    ...// some code 
    if (bar > FOO) { 
    ...// do stuff 
    } 
} 

또는

void f() { 
    ...// some code 
    const FOO = 3; 
    if (bar > FOO) { 
    ...// do stuff 
    } 
} 

나는 작은 기능의 상단에있는 CONST을 사용하고 큰 기능에 가능한 한 가까운 범위를 유지하는쪽으로 기울고 있어요,하지만 난 궁금 무엇을 다른 사람의 스타일/생각은 이것에 관한 것입니다.

답변

8

가능하면 가장 낮은 범위에서 처음 사용하기 직전.

스타일의 문제로서, 개념적으로 유사한 상수를 그룹화하는 것과 같이 명확성/비결 정성을 위해 예외를 만들 수 있습니다.

0

당신의 접근 방식이 올바른 것 같습니다.

"설정"또는 조정 가능 항목이 다른 사람에게 잘 보이는지 확인하기 위해 파일의 맨 위에 이러한 마법 번호를 넣기까지합니다.

0

정말로 원하는 일에 달려 있습니다. 나는 보통 그들이 실제로 사용되는 곳에 아주 가까이에 놓는다.

그룹화 할 때 맨 위에 놓고 다른 하나를보아야 만합니다 (예 : 상수가 다른 상수에 의존하는 경우).

3

여러 번 const 값은 파일을 맨 위에 배치하여 개발을 수행하는 개인이 쉽게 알아볼 수 있도록합니다. 그러나 매우 작은 코드 조각에 대해서만 const 값이 필요한 경우, 제안 된대로 필요한 곳에 만 범위를 지정하는 것이 좋습니다.

0

특히 시작 값 (const 값 포함)이 모두 포함 된 더 긴 알고리즘을 코딩하고 함수의 맨 위에 선언 된 변수를 사용하면 알고리즘 자체를 읽을 때 훨씬 더 명확하게됩니다.

1

헤더 파일이나 네임 스페이스 아래에 넣는 것이 좋습니다.

0

이전 C99 버전의 C에서는 블록 시작 부분에 변수 만 정의 할 수있었습니다. 따라서 두 번째 대안은 유효한 C 코드가 아닙니다. 나는 Code Complete가 선언문을 가능한 한 첫 번째 사용에 가깝게 두는 편이 좋다고 믿는다. 그러나 일부는 C와 C++간에 일관성이없는 것으로 만드는 이유로이 규칙에 반대한다고 주장했을 것이다.

이제 표준 C와 C++ 둘 다 사용하여 더 이상 첫 번째 사용에 가까운 선언을 이동할 수 없으며 그 반대는 더 이상 유지되지 않습니다.

선언문을 가능한 한 늦게 배치하는 것이 맨 위에있는 것보다 const가 아닌 변수에 더 좋은 이유가있을 수 있습니다. 예를 들어, 초기화가없는 선언은 실수로 초기화되지 않은 변수를 읽을 수있는 가능성을 열어줍니다. 또한 C++에서 함수를 초기화하지 않고 클래스 변수를 선언하면 기본 생성자가 호출됩니다. 나중에 할당되면 할당 연산자가 호출됩니다. 변수가 초기화 시점에서 대신 선언 된 경우 복사 생성자를 호출합니다.기본 생성자 + 할당의 비용은 종종 복사 생성자의 비용보다 클 수 있습니다.

이 마지막 인수는 const 변수에 지정이 없기 때문에 비 const 변수에만 적용 할 수 있습니다. 하지만, 왜 const 선언문을 다른 곳에서 봐야할까요? 그리고 const int n = 3; 분명 const입니다, const char * s = "FOO";는 어떨까요? 저것은 정상에 속하기 위하여 충분히 const인가 또는 아닙니다? 아니면 그것은 const char * const s = "FOO";가되어야합니까? 또한 const 변수가 맨 위에 어떤 값을 초기화하는지 알지 못하는 경우 은 초기화해야 할 항목을 알 때까지은 const 변수를 선언하도록 연기해야합니다.

관련 문제