2013-05-24 4 views
5

"const"를 좋아합니다. 나는 "const"가되어야하는 모든 변수와 메소드를 "const"라고합니다. 문제는 변수 또는 메소드가 "const가되어야한다"는 여부는 호출 트리의 메소드/변수에 따라 달라집니다. 코드 바디를 정적으로 검사하고 "bottom-up en-const-ification"을 수행하기위한 도구 나 프로세스가 있습니까?C++ 변수를 const로 지정

+7

'const'를 사용하는'const' 멤버 함수/함수 만 사용했기 때문에'const'를 만들면 안됩니다. 개념적으로 변경해서는 안되기 때문에 'const'로 만들어야합니다. – BoBTFish

답변

6

나는 당신의 질문에 대한 답을 모르는,하지만 난 변수 또는 "이 CONST되어야한다"방법은 더 아래의 방법/변수에 따라 달라집니다

여부는 주장에 대해 주장하고 싶습니다 호출 트리

실제로 const는 논리적 레벨에 있어야합니다. 나는. 논리적으로 변경되지 않아야하는 경우 const로 표시해야합니다. 나중에 그렇다면 컴파일러 오류가 발생하고 변경 사실 또는 초기 가정을 재검토해야합니다.

규칙은 다음과 같습니다

뭔가 CONST 인 경우 뭔가가 사실상 변경되지 않은 경우,이

보다

다소 변경 될 수 없습니다

, 다음의 그것을 만들어 보자 const

0

다양한 정적 그렇게 할 수있는 분석 도구. Gimpel Flexelint가 떠오른다.

이렇게 말한 결과, 꽤 옳은 것처럼 보이는 결과를 얻을 수 있습니다. 예를 들어, 주어진이 :

class Wibble { 
    Some_Implementation_Detail *stuff; //PIMPL idiom 
    public: 
    void set_something(int a) { stuff->set(a); } 
}; 

다음 set_something const 수 있습니다. 이것은 기술적으로 정확하지만 아주 유용하지는 않습니다. 논리적으로이 경우에는 const이 아니기 때문입니다.

관련 문제