... 아래의 코드를 컴파일 할 때 다음과 같은 경고를 얻을부호없는 정수 연산 경고
: 여기
warning: conversion to 'short unsigned int' from 'int' may alter its value
코드의 발췌 한 것입니다 (몇 가지 예는 내 질문에 설명하기 위해) :
std::vector<unsigned short int> list = {1};
unsigned short int one = 1;
one += list.at(0); // produces warning
one += 1; // produces warning
one += static_cast<unsigned short int> 1; // produces warning
one++; // does not produce warning
는 또한뿐만 아니라 이외의 산술 다른 형태의 시도했습니다. 왜 컴파일러는이 경고를 던져서 'int'에서 'unsigned short int'로 변환한다고 주장합니다 (특히 내가 명시 적으로 부호없는 것으로 캐스팅 한 경우)? 두 번째 경우의 'one + = 1;'은 표현식의 오른쪽이 양수이기 때문에 컴파일러는 부호없는 변수 'one'에이를 추가하는 데 아무런 문제가 없을 것입니다.
또한 최종 테스트 'one ++;' 왜 경고하는지 알지 못합니다. 왜 그런지 모르겠습니다.
나는이 질문이 사소하거나 불명확 할 경우 나에게 용서를 구한다. 감사!
g ++에 대한 경고 메시지가 표시되지 않고 어떤 플래그를 사용하고 있습니까? –
경고'C++ -Wall'을 동의하지 마십시오. 아마도 정확한 코드를 붙여 넣을 수 있습니다. – spinkus
경고에 대한 어떤 이유도 보이지 않습니다 (정적 캐스팅 인'1' 주변에 괄호로 오류가 나타납니다) ... [GCC on ideone] (http://ideone.com/CKmX9L)하지만 기본적으로 사용되는 경고 수준은 확실하지 않습니다. 어느 컴파일러를 사용하고 있습니까? 어떤 설정입니까? –