Có int a=1, b=a++;
gọi hành vi không xác định không? Không có điểm chuỗi can thiệp giữa việc khởi tạo a
và truy cập và sửa đổi của nó trong bộ khởi tạo cho b
, nhưng theo như tôi có thể nói, khởi tạo không phải là "sửa đổi" của đối tượng; một initializer được xác định để cung cấp cho các "giá trị ban đầu" của đối tượng. Mỗi 6.7.8 Khởi tạo, đoạn 8:Có int a = 1, b = a ++; gọi hành vi không xác định?
Trình khởi tạo chỉ định giá trị ban đầu được lưu trữ trong một đối tượng.
và có vẻ hợp lý khi thực hiện "ban đầu" khi được sắp xếp theo trình tự trước khi bất kỳ quyền truy cập nào vào đối tượng. Vấn đề này đã được xem xét trước đây chưa, và có một giải thích được chấp nhận không?
Tôi muốn nói Chú thích 97 nói rằng điều này giống hệt 'int a = 1; int b = a ++; '. –
@KerrekSB: Chú thích chân trang 97 trong phiên bản nào (hoặc bản nháp) của tiêu chuẩn? Các số chú thích ngắn hơn nhiều so với số phần. –
IIRC, trong các phiên bản mới nhất của tiêu chuẩn, khái niệm "các điểm chuỗi" đang bị lỗi thời. Đối với các chú thích, gần đây đã có một cuộc thảo luận về một chú thích đã xác định thứ tự xử lý cấu trúc khai báo và khởi tạo, và chú thích đó thực sự có vẻ khá cũ và ổn định :) – quetzalcoatl