2017-01-03 9 views

Odpowiedz

14

Pytanie jest dyskusyjne. Arytmetyka wskaźnikowa jest zdefiniowana tylko na wskaźnikach należących do tej samej tablicy, co z pewnością nie ma miejsca w tym przypadku. Tak więc powyższy kod jest nie legalny C++, i faktycznie, nie kompiluje się z dostępnymi dla mnie kompilatorami.

+0

lub dwa zerowe wskaźniki IIRC, który również nie jest z pewnością walizka. – hvd

+1

Więc zbytnio zinterpretowałem sformułowanie? Tak, testowałem to również, ale nauczyłem się, że fakt, że coś nie kompiluje się w danym kompilatorze, tak naprawdę nie jest tak naprawdę to nie jest legalne stąd pytanie :) –

+0

@hvd, nie pamiętam żadnego wyjątku dla wskaźników zerowych dotyczących odejmowania , ale moja pamięć może mnie zawieść. Czy byłbyś tak miły, aby podać ofertę? – SergeyA

3

Cytowana cppref article mówi

Rdzeń stała ekspresja jest dowolny ekspresji, które nie mają żadnych jedną z następujących ..

7) Wyrażenie których ocenę prowadzi się do dowolnej formy rdzeń język (od C++ 17) niezdefiniowane zachowanie (łącznie ze znakiem przekroczenia liczby całkowitej, dzielenie przez zero, wskaźnik arytmetyczny poza tablicą powiązaną s, itp.). To, czy wykryto niezdefiniowane zachowanie biblioteki standardowej, jest nieokreślone: ​​ . (Od C++, 17)

19) operatora odejmowanie pomiędzy dwoma wskaźnikami (do C++ 14)

tylko może tablicy ptr arithemtics wewnątrz granic tablicy jest otrzymywaniem legalizacji ", ponieważ C++ 14 nie wszystkie arytmetyka wskaźnik


Właściwie demo pokazuje, że tablica PTR arithmetics kompiluje dobrze nawet z C++ 11 (nie C++ 98)