size_t가 잘못되었음을 나타내는 데 사람들이 사용하는 것은 무엇입니까? -1은 작동하지 않고 0은 유효한 크기 일 수 있습니다.size_t에 대한 값이 잘못되었습니다.
답변
아마도 ((size_t)-1)
?
엄밀히 말하면, 그것은 는 유효한 크기이지만,이 하나가되면 당신은 다른 필요 가능성이 아니에요 ;-)
일부 C99 멀티 바이트 문자열 함수는 이렇게합니다 : 비정상 조건을 나타 내기 위해'(size_t) (- 1)'또는'(size_t) (- 2)'를 반환합니다. 그것은 최적은 아니지만 실제로 작동합니다. 당신의 질문에 대한 이유가 에러 처리라면, 에러 변수 (예를 들어'_Bool' 타입의 에러 플래그,'int' 타입의 에러 코드 또는 타입' const char *')를 추가 인수로 사용합니다. – Christoph
예, 일반적인 관용구입니다. '(time_t) -1'도 자주 볼 수 있습니다. –
@ MichaelKrelin-hacker :'(time_t) -1'은 조금 다릅니다; 표준은 현재 시간을 결정할 수 없다면'time()'에 의해 반환 된 값이라고 특별히 말합니다. 그리고'time_t'는 종종 signed 타입이기 때문에'(time_t) -1'은 대개 신기원 이전의 1 초입니다. –
기본적으로 할 수 없습니다. 당신이 사용하는 모든 가치가 유효한 것일 수 있습니다. 그것이 잘못되었다는 플래그를 더 잘 전달하십시오.
그리고 무엇을 당신이 int
이 잘못되었음을 나타 내기 위해해야합니까? -1은 int에 유효한 값입니다. 이러한 유형에는 지정된 "유효하지 않은"값이 없습니다. 불법적 인 가치를 나타 내기 위해 특정 가치 (결코 당신의 변수가 나타내는 어떤 가치도 될 수없는)를 선택하기로 결정할 수 있습니다. 그러나 그것은 사람들이 일반적으로 사용하는 것이 아니라 당신 자신의 정의입니다.
개인적으로, 나는 이런 식으로하지 않습니다. 나는 다른 변수, bool IsValid
을 생성하는 것을 선호하는데, 그것은 size_t 변수의 값이 유효한지 여부를 나타냅니다. 때로는 클래스를 만들어 캡슐화하는 것이 더 나을 수도 있습니다.
std :: string에 대해 이야기하는 경우 size_t의 잘못된 값은 std :: string :: npos입니다. 일반적으로 size_t는 부호가 없으므로 -1을 사용하면 안되며 형식 간 암시 적 변환을 수행하는 컴파일러에서 실패한 비교를 얻을 수 있습니다.
즉, std :: strings의 npos는 0XFFFFFFFFFFFFFFFF ... 이진 등가 인 -1로 설정됩니다. 또한 서명되지 않은 size_t 필드에 대해 허용되는 최대 값으로 평가됩니다.
은'string :: size_type'가 아니라'size_t'입니다 .--) –
아직도 대답은 남았습니다. 단단한 금이다. 솔리드 골드! – Kieveli
적어도 빛나네 ;-) –
내 버전은 다음과 같습니다
#include <limits>
#define invalid_index std::numeric_limits<size_t>::max()
이 질문에 태그가 붙여져 있으므로'std :: numeric_limits
- 1. Silverlight 속성에 대한 속성 값이 잘못되었습니다. 표시
- 2. DropDownList, SQL Server의 값이 잘못되었습니다.
- 3. mysql의 값이 잘못되었습니다. INNER JOIN
- 4. SQLite를 사용하여 얻은 값이 잘못되었습니다.
- 5. 참조로 연산자 캐스팅의 값이 잘못되었습니다.
- 6. JS 액세스 DOM의 값이 잘못되었습니다.
- 7. double.Parse (string)의 값이 잘못되었습니다.
- 8. 64bit 비스타에서 os.environ [ "ProgramFiles"]에 대한 Python의 값이 잘못되었습니다.
- 9. Silverlight의 TargetType 속성에 대한 특성 값이 잘못되었습니다. 사용자 지정 컨트롤
- 10. python float에 대한 문자가 잘못되었습니다.
- 11. ConfigurationErrorsException "키 값이 잘못되었습니다."내가 뭘 잘못하고 있니?
- 12. Perl 및 Java 소켓을 통한 Byte 배열의 값이 잘못되었습니다.
- 13. ArgumentError : 오류 # 1508 : 인수 font에 지정된 값이 잘못되었습니다.
- 14. "기본 10의 int()에 대한 리터럴 값이 잘못되었습니다."가 계속 올라갑니다.
- 15. PIC - RB7에 대한 값이 있습니까?
- 16. 데이터 판독기에 대한 null 검사가 잘못되었습니다.
- 17. "print expr"에 대한 구문 오류가 잘못되었습니다.
- 18. 텍스트 파서에 대한 단위 테스트를위한 입력이 잘못되었습니다.
- 19. Base-64 문자 배열에 대한 길이가 잘못되었습니다.
- 20. PKCS # 11 Java - 메모리 위치에 대한 액세스가 잘못되었습니다.
- 21. DataTable의 TimeZone이 잘못되었습니다.
- 22. 값이
- 23. 람다식이 잘못되었습니다.
- 24. ')'구문이 잘못되었습니다.
- 25. 그리드 레이아웃에 대한 음수 값이 무엇입니까?
- 26. pcap에 대한 읽기 시간 초과 값이
- 27. 피벗 테이블 값이 흐려짐
- 28. 오류 번호가 잘못되었습니다.
- 29. 코드 서명 앱 제출이 잘못되었습니다.
- 30. 2005 년 인스턴스의 연결된 2008 SQL Server에 대해 "캐스트 사양의 문자 값이 잘못되었습니다."
어떻게 -1 "작동하지"는 무엇입니까? –
필자는 개인적으로 비 POSIX 시스템 사용을 거부하고'ssize_t '를 사용할 수 있습니다. –