2012-04-28 4 views
4

컴파일러 /Za 옵션을 사용하여 컴파일러가 엄격하게 표준 ISO C++를 사용하도록 lanquage 확장을 사용하지 않도록 설정했습니다. 다음과 같은 경고 메시지가 나타나는 예제 인터페이스 클래스입니다.경고 C4180 : 함수 유형에 적용되는 한정자는 의미가 없습니다. ignored

경고 C4180 : 함수 유형에 적용되는 한정자는 의미가 없습니다. 내가 disapears 경고, CONST를 제거하면 는, 함수의 반환 형식에

그것은 const를 규정에 관한 무시하지만 난 싶지하지 neather 내가 다시 lanqage의 extenstions을 사용하려면, 그렇게.

내 질문은 : 경고가 합리적입니까? 그렇다면 pragma를 사용하여 경고를 사용하지 않겠지 만이 경고가 "false positive"인지 확인하고 싶습니다.

다음 클래스는 올바른 ANSI ISO C++ Isn'it입니까? 그래서 경고는 무력화되어야합니까?

class IBet 
    { 
    public: 
     IBet() { }; 
     virtual ~IBet() = 0 { }; 
     virtual const float parentChips() const = 0; // Warning C4180 
     virtual const short parentChilds() const = 0; // Warning C4180 
      // ... 
    }; 
+0

이 경고는 by-value 반환 유형을 'const'로 지정하는 것이 의미가 없다는 의미에서 유효합니다. 그것이 유효한 ANSI C++이든 아니든, 나는 확실하지 않습니다. –

+3

SO 및 다른 검색 엔진에서 쉽게 검색 할 수 있도록 제목을 변경합니다. – iammilind

+0

이 경고가'/ Za'에 의해 * 일으켰다 고 제안합니다. 스위치를 제거하면 실제로 사라 집니까? –

답변

7

두 함수의 반환 값은 const으로 선언됩니다. 그것은 값으로 전달되기 때문에 의미가 없습니다. const은 아무 의미가 없으므로 제거 할 수 있습니다.

+0

데이비드, 고맙다. 값으로 돌아가서 const를 사용하는 것이 올바르지 않다는 것을 알 수 있습니까? ISO C++? 나는 그것에 대해 알고 싶다. – codekiddy

+0

'const' 리턴 값을 사용하는 것은 올바른 ISO C++이다. 그러나, 그것은 무의미한 것이므로 무엇을해야합니까 그것을 제거합니다. –

+0

@codekiddy 올바르지 않으면 컴파일러는 경고하지 않고 코드를 거부해야합니다 (즉, 오류 또는 경고). 거기에 const를 추가한다고는 믿을 수는 없지만 컴파일러가 경고해야한다고 생각하지 않습니다 (즉, 경고가 코드의 품질을 증명하지 못하거나 버그 가능성을 줄이지 못한다는 의미입니다) –

관련 문제