Co powinno się stać z negacją size_t (tj. `-Sizeof (struct foo)`))?
Mam do czynienia z jakimś kodem w pracy, który zawiera wyrażenie formularza
-(sizeof(struct foo))
tj. negacja asize_t
i nie jestem pewien, jakich standardów C i C ++ wymagają kompilatory, gdy to widzą. W szczególności od rozglądania się tutaj i gdzie indziej,sizeof
zwraca całkowitą wartość typu bez znakusize_t
. Nie mogę znaleźć żadnego wyraźnego odniesienia dla określonego zachowania podczas negowania liczby całkowitej bez znaku. Czy jest coś takiego, a jeśli tak, to co to jest?
Edycja: Ok, więc jest kilka dobrych odpowiedzi dotyczących arytmetyki na niepodpisanych typach, ale nie jest jasne, czy tak właśnie jest. Kiedy to zaneguje, czy działa na niepodpisanej liczbie całkowitej, czy konwertuje na typ podpisany i robi coś z tym? Czy zachowanie należy oczekiwać od standardów „wyobraź sobie, że jest to liczba ujemna o podobnej wielkości, a następnie stosuje zasady„ przepełnienia ”dla wartości niepodpisanych”?