1. C++ chuẩn cấm sử dụng các lớp được xác định cục bộ với mẫu.
14.3.1/2: Một loại địa phương, một loại không có mối liên kết, một loại vô danh hoặc một loại phức tạp từ bất kỳ các loại sẽ không được sử dụng như một mẫu đối số cho một kiểu mẫu -tham số.
Một mã ví dụ:
template <class T> class X { /* ... */ };
void f()
{
struct S { /* ... */ };
X<S> x3; // error: local type used as
// template-argument
X<S*> x4; // error: pointer to local type
// used as template-argument
}
Dưới đây là một chút tham khảo thêm tài liệu từ IBM:
2. Khai báo trong một lớp học địa phương chỉ có thể sử dụng tên loại, kiểu liệt kê, các biến tĩnh từ phạm vi kèm theo, cũng như các biến và hàm bên ngoài.
Một Mã số Ví dụ:
int x; // global variable
void f() // function definition
{
static int y; // static variable y can be used by
// local class
int x; // auto variable x cannot be used by
// local class
extern int g(); // extern function g can be used by
// local class
class local // local class
{
int g() { return x; } // error, local variable x
// cannot be used by g
int h() { return y; } // valid,static variable y
int k() { return ::x; } // valid, global x
int l() { return g(); } // valid, extern function g
};
}
int main()
{
local* z; // error: the class local is not visible
return 0;
}
3. Một lớp học tại địa phương không thể có tĩnh thành viên dữ liệu
Một Mã số Ví dụ:
void f()
{
class local
{
int f(); // error, local class has noninline
// member function
int g() {return 0;} // valid, inline member function
static int a; // error, static is not allowed for
// local class
int b; // valid, nonstatic variable
};
}
Nguồn
2011-06-20 18:12:30
@Nawaz: Đây không phải là bản sao chính xác Tôi nghĩ rằng –
@ 0A0D: Loại câu hỏi được hỏi ở đây, cũng đã được trả lời trong chủ đề đó. Do đó một bản sao có thể. – Nawaz
@Billy: Trong trường hợp đó, hãy để tôi sao chép dán câu trả lời của tôi từ chủ đề khác. – Nawaz