2013-10-09 20 views
6

Giả sử tôi có lớp họcCác biến lớp mẫu tĩnh có instantiations khác nhau giống nhau không?

template <typename T> 
class MyClass 
{ 
    static int myvar; 
} 

Bây giờ điều gì sẽ xảy ra trong các bài tập sau đây?

MyClass<int>::myvar = 5; 
MyClass<double>::myvar = 6; 

Điều gì sẽ xảy ra theo tiêu chuẩn? Tôi sẽ có hai phiên bản MyClass :: myvar hay chỉ một?

+3

Câu trả lời đơn giản, hai – john

+1

@ShafikYaghmour Tôi đang viết hướng dẫn cho một nhóm lớn các lớp học và câu hỏi này xảy ra với tôi, bởi vì tôi có một hàm tĩnh đặt một số biến tĩnh và tôi nghĩ nó có thể là tốt câu hỏi cho công chúng. Có lẽ biết những gì tiêu chuẩn nói về nó là tốt hơn so với cố gắng. –

+1

@TheQuantumPhysicist Ok, điều đó có nghĩa, tôi tìm thấy báo giá từ tiêu chuẩn cho biết rằng mỗi chuyên môn sẽ có một bản sao của bất kỳ thành viên tĩnh nào. –

Trả lời

2

Vì OP đã yêu cầu báo giá cụ thể từ tiêu chuẩn, đây là câu trả lời của tôi bao gồm báo giá có liên quan từ tiêu chuẩn.

Mỗi chuyên môn sẽ có bản sao riêng là myvar có ý nghĩa vì mỗi loại là riêng biệt lớp. C++ dự thảo tiêu chuẩn trong phần 14.7Template instantiation và chuyên môn hóa đoạn nói (nhấn mạnh tôi):

Mỗi lớp mẫu chuyên môn instantiated từ một mẫu có bản sao riêng của bất kỳ thành viên tĩnh.

[ Example: 
template<class T> class X { 
    static T s; 
}; 
template<class T> T X<T>::s = 0; 
X<int> aa; 
X<char*> bb; 

X có thành viên tĩnh là loại int và X có thành viên tĩnh là kiểu char *. —end ví dụ]

7

Có, sẽ có hai biến có hai giá trị khác nhau. Nhưng đó là vì hai là các lớp hoàn toàn không có liên quan. Đó là cách các mẫu hoạt động. Đừng nghĩ về chúng như là các lớp học, mà đúng hơn là một bộ quy tắc mà sau đó các lớp được xây dựng.

+1

STL đã từng nói (diễn giải): "mẫu là máy cắt cookie. Bạn không thể ăn máy cắt cookie nhưng bạn có thể tạo các cookie mà bạn * có thể * ăn bằng máy cắt cookie". : P – Simple

1

Một 'lớp mới hoàn toàn' được khởi tạo từ mẫu cho 'mỗi tên tệp'. Và vì các thành viên tĩnh được gắn với lớp, mỗi lớp này có các bản sao riêng của biến tĩnh.

Các vấn đề liên quan