int fn();
void whatever()
{
(void) fn();
}
사용하지 않은 반품 가치를 무효화 할 이유가 있습니까, 아니면 완전한 시간 낭비라고 생각하는 것이 맞습니까?
후속 조치 :
꽤 포괄적 인 것 같습니다. 자체 문서화 코드가 주석보다 낫기 때문에 사용하지 않는 반환 값을 주석 처리하는 것보다 낫다고 생각합니다. 개인적으로 불필요한 소음 이니까이 경고를 끄겠습니다.
그것 때문에 벌레가 도망 치면 내 말을 먹어 볼게 …
답변
David의 대답 은이 함수가 반환하는 것을 알고 있지만 명시 적으로 무시하고 있음을 다른 “개발자”에게 명시 적으로 보여 주려는 동기를 거의 다룹니다.
이는 필요한 오류 코드가 항상 처리되도록하는 방법입니다.
C ++의 경우 전체 정적 캐스트 표기법을 사용하는 것이 과도하게 느껴지기 때문에 C 스타일 캐스트도 사용하는 것을 선호하는 유일한 장소라고 생각합니다. 마지막으로 코딩 표준을 검토하거나 작성하는 경우 오버로드 된 연산자 (함수 호출 표기를 사용하지 않음)에 대한 호출도 이것에서 제외되어야한다고 명시 적으로 명시하는 것도 좋습니다.
class A {};
A operator+(A const &, A const &);
int main () {
A a;
a + a; // Not a problem
(void)operator+(a,a); // Using function call notation - so add the cast.
답변
직장에서 우리는 함수가 반환 값을 가지고 있음을 인정하기 위해 그것을 사용하지만 개발자는 그것을 무시해도 안전하다고 주장했습니다. 질문에 C ++ 태그를 지정 했으므로 static_cast 를 사용해야합니다 .
static_cast<void>(fn());
컴파일러가 반환 값을 void로 캐스팅하는 한 의미가 거의 없습니다.
답변
이 작업을 수행하는 진정한 이유는 lint 라는 C 코드에서 사용 된 도구로 거슬러 올라갑니다 .
가능한 문제를 찾고 경고 및 제안을 발행하는 코드를 분석합니다. 함수가 확인되지 않은 값을 반환하면 lint
우연한 경우 경고합니다. lint
이 경고 를 무음 으로 처리 하려면으로 전화를 (void)
겁니다.
답변
캐스팅 대상 void
은 사용되지 않은 변수 및 저장되지 않은 반환 값 또는 식에 대한 컴파일러 경고를 억제하는 데 사용됩니다.
Standard (2003)는 §5.2.9 / 4에서 다음과 같이 말합니다.
모든 표현식은 “cv void”유형으로 명시 적으로 변환 할 수 있습니다. 식 값이 삭제됩니다 .
따라서 다음과 같이 작성할 수 있습니다.
//suppressing unused variable warnings
static_cast<void>(unusedVar);
static_cast<const void>(unusedVar);
static_cast<volatile void>(unusedVar);
//suppressing return value warnings
static_cast<void>(fn());
static_cast<const void>(fn());
static_cast<volatile void>(fn());
//suppressing unsaved expressions
static_cast<void>(a + b * 10);
static_cast<const void>( x &&y || z);
static_cast<volatile void>( m | n + fn());
모든 양식이 유효합니다. 나는 보통 다음과 같이 짧게 만듭니다.
//suppressing expressions
(void)(unusedVar);
(void)(fn());
(void)(x &&y || z);
그것도 괜찮습니다.
답변
C ++ 17 이후로 캐스트 [[maybe_unused]]
대신 사용할 수있는 속성이 있습니다 void
.
답변
Cast to void는 비용이 들지 않습니다. 컴파일러를위한 정보 일뿐입니다.
답변
프로그램의 기능을 위해 void로 캐스팅하는 것은 의미가 없습니다. 또한 David의 답변에서 제안한 것처럼 코드를 읽는 사람에게 신호를 보내는 데 사용해서는 안된다고 주장합니다. 당신의 의도에 대해 뭔가를 전달하고 싶다면 코멘트를 사용하는 것이 좋습니다. 이와 같은 캐스트를 추가하면 이상하게 보이고 가능한 이유에 대한 질문이 제기됩니다. 그냥 내 의견 …