const 정확성에 나를 판매 이유는 무엇입니까? const 사용하는 것이 C ++의

const를 가능한 한 자주 사용하는 것이 권장되는 이유는 무엇입니까? const 사용하는 것이 C ++의 도움보다 더 고통 스러울 수 있습니다. 그러나 다시 한 번 파이썬 관점 에서이 문제를 해결하려고합니다. 변경하고 싶지 않은 경우 변경하지 마십시오. 그래서 그와 함께 몇 가지 질문이 있습니다.

  1. 무언가를 const로 표시 할 때마다 오류가 발생하고 다른 함수를 const로 변경해야합니다. 그런 다음 다른 곳에서 다른 기능 을 변경해야합니다 . 이것이 경험으로 더 쉬워지는 것입니까?

  2. const 사용의 이점이 실제로 문제를 보완하기에 충분합니까? 객체를 변경하지 않으려면 객체를 변경하지 않는 코드를 작성하지 마십시오.

이 시점에서 정확성과 유지 관리 목적으로 const를 사용하는 이점에 가장 중점을 두었지만 성능에 대한 아이디어를 갖는 것도 좋습니다.



답변

:이 “CONST 정확성”에 결정적인 기사입니다 https://isocpp.org/wiki/faq/const-correctness .

간단히 말해 const를 사용하는 것이 좋습니다.

  1. 의도하지 않은 변수를 실수로 변경하는 것을 방지합니다.
  2. 실수로 변수를 할당하는 것을 방지하고
  3. 컴파일러가이를 최적화 할 수 있습니다. 예를 들어,

    if( x = y ) // whoops, meant if( x == y )

동시에 컴파일러는 변수 / 함수의 상태를 항상 정확히 알고 있기 때문에보다 효율적인 코드를 생성 할 수 있습니다. 엄격한 C ++ 코드를 작성하는 경우 좋습니다.

const-correctness를 일관되게 사용하는 것이 어려울 수 있지만, 최종 코드는 더 간결하고 프로그래밍하기에 안전합니다. 많은 C ++ 개발을 수행하면이 이점이 빠르게 나타납니다.


답변

const 정확성이 당신을 보호 할 수있는 일반적인 오류가있는 코드는 다음과 같습니다.

void foo(const int DEFCON)
{
   if (DEFCON = 1)     //< FLAGGED AS COMPILER ERROR! WORLD SAVED!
   {
       fire_missiles();
   }
}


답변

const로 표시 할 때마다 오류가 발생하고 const가되도록 다른 함수를 변경해야합니다. 그런 다음 다른 곳에서 다른 기능을 변경해야합니다. 이것이 경험으로 더 쉬워지는 것입니까?

경험상 이것은 완전한 신화입니다. const-correct가 아닌 것이 const-correct 코드와 함께있을 때 발생합니다. 처음부터 const-correct를 디자인하면 결코 문제가되지 않습니다. const를 만들고 다른 것이 호환되지 않으면 컴파일러가 매우 중요한 것을 말하고 있으므로 올바르게 수정해야합니다 .


답변

처음 코드를 작성할 때는 그렇지 않습니다. 클래스 또는 인터페이스 내에서 메소드 선언을보고있는 다른 사람 (또는 몇 개월 후에)이 수행하는 작업을 확인하는 것입니다. 객체를 수정하지 않는 것은 그로부터 수집해야 할 중요한 정보입니다.


답변

const를 엄격하게 사용하면 대부분의 함수에 실제 변수가 얼마나 적은지 놀랄 것입니다. 종종 루프 카운터 이상입니다. 코드가 그 지점에 도달하면 내부에서 따뜻한 느낌을 얻습니다 … 컴파일로 유효성 검사 … 기능 프로그래밍 영역이 가까이 있습니다 … 지금 거의 만질 수 있습니다 …


답변

const는 개발자로 만들고 약속에 컴파일러의 도움을 요청하는 약속입니다.

const-correct 인 나의 이유 :

  • 변수 또는 객체를 변경하지 않을 것이라고 함수의 클라이언트와 통신합니다.
  • const 참조로 인수를 허용하면 값으로 전달하는 안전과 함께 참조로 전달하는 효율성이 제공됩니다.
  • 인터페이스를 const로 작성하면 클라이언트가 인터페이스를 사용할 수 있습니다. const가 아닌 참조를 사용하도록 인터페이스를 작성하는 경우 const를 사용하는 클라이언트는 작업을 위해 constness를 캐스트해야합니다. 인터페이스가 비 const char *를 허용하고 클라이언트가 std :: strings를 사용하는 경우 특히 성가시다. 왜냐하면 const char * 만 가져올 수 있기 때문입니다.
  • const를 사용하면 컴파일러가 정직하게 유지되므로 변경해서는 안되는 것을 실수로 변경하지 않습니다.

답변

저의 철학은 컴파일 타임 검사와 함께 nit-picky 언어를 사용한다면 최대한 활용하는 것입니다. const컴파일러가 강제로 의미 하는 바를 전달하는 방법입니다 … 댓글이나 doxygen 이하는 것보다 낫습니다. 당신은 가격을 지불하고, 왜 가치를 도출하지 않습니까?