Theo cppreference phần Lõi biểu thức hằng số điểm 19) một nhà điều hành phép trừ giữa hai con trỏ không phải là quy phạm pháp luật liên tục biểu cho đến khi C++ 14. Tôi có thể giả định rằng mã sau đây là mã C++ 17 hợp pháp hay liệu đây có phải là một sự lạm dụng?Sự khác biệt giữa hai con trỏ hợp pháp C++ 17 biểu thức không đổi?
int X, Y;
template <long long V>
struct S { };
int main() {
S<&X - &Y> s;
(void)s;
}
Hoặc hai con trỏ null IIRC, cũng là chắc chắn không phải là trường hợp. – hvd
Vì vậy, tôi đã diễn giải quá mức từ ngữ? Vâng, tôi đã thử nghiệm nó quá nhưng tôi đã học được rằng thực tế một cái gì đó không biên dịch trong trình biên dịch đưa ra không thực sự quan tâm nó thực sự là không hợp pháp do đó câu hỏi :) –
@ hvd, tôi không nhớ bất kỳ ngoại lệ cho con trỏ null về trừ nhưng trí nhớ của tôi có thể thất bại. Bạn sẽ rất tử tế để cung cấp một báo giá? – SergeyA