xem xét:Các hàm gọi trong danh sách khởi tạo của trình xây dựng có được sắp xếp không?
int f() {
static int i = 0;
return i++;
}
struct Test {
int a, b;
Test() : a(f()), b(f()) {}
};
Test t;
Tôi biết rằng a
được khởi tạo trước khi b
do trình tự của việc kê khai trong struct
.
Tôi cũng biết rằng hai cuộc gọi đến f
trong g(f(), f())
không được kết thúc.
Vì vậy, tôi tự hỏi nếu nó được đảm bảo rằng t.a == 0
và t.b == 1
?
@ FrançoisAndrieux Tôi không cho rằng đó là bản sao. Câu hỏi này là cụ thể đối phó với thứ tự của các cuộc gọi chức năng trong danh sách khởi tạo thành viên, đó không phải là những gì mà câu hỏi đề cập đến. – Xirema
@ FrançoisAndrieux - đừng nghĩ đó là sự lừa đảo. OP biết rằng 'a' được khởi tạo trước' b'. Nhưng đang hỏi liệu hai lệnh gọi tới 'f()' có được sắp xếp theo trình tự hay không. Có thể là 'f()' được gọi hai lần trước khi 'a' hoặc' b' được khởi tạo. –
Tôi cần xác minh nhưng tôi tin là vậy. –