Hãy nói rằng tôi có chương trình này:biến tĩnh trong phương pháp dụ
class Foo {
public:
unsigned int bar() {
static unsigned int counter = 0;
return counter++;
}
};
int main()
{
Foo a;
Foo b;
}
(Tất nhiên ví dụ này chẳng có ý nghĩa kể từ khi tôi muốn rõ ràng tuyên bố "counter" như một thuộc tính riêng, nhưng nó chỉ là để minh họa vấn đề).
Tôi muốn biết cách hoạt động của C++ trong loại tình huống này: liệu biến "truy cập" trong phương thức bar() có giống nhau cho mọi trường hợp không?
+1 để đề cập đến mối nguy hiểm trong môi trường đa luồng. – Omnifarious
Giả sử trình biên dịch chưa xử lý điều đó cho bạn. Định nghĩa ngôn ngữ là biến là tính nhất quán trong tất cả các cuộc gọi đến phương thức. Vì vậy, nó là công việc biên dịch để thực thi điều này, vì vậy trong các ngôn ngữ đa luồng (phiên bản tiếp theo của C++) nó là công việc biên dịch. Trong phiên bản này, nó phụ thuộc vào sự tích hợp của trình biên dịch với thư viện luồng. gcc đã có bảo hiểm này và gurantees truy cập vào biến tĩnh là an toàn trên nhiều chủ đề. –
@Martin York: tức là các biến tĩnh trong C++ 0x được đảm bảo là chuỗi địa phương? Thú vị thế nào, và nó có thể gây ngạc nhiên cho một số người. Giống như một truy cập ví dụ lớp tĩnh tốt đẹp. Đột nhiên, bạn sẽ được đếm các trường hợp cho mỗi chủ đề thay thế. Tôi không thể tin rằng họ sẽ thay đổi như thế. Bạn có chắc không?! – Omnifarious