tôi đang trải qua C++11 standard draft một thời gian trước và đã xem qua một này (trong §8.3.6, p 204).:C++ - Khai báo chức năng bên trong phạm vi chức năng?
void g(int = 0, ...); // OK, ellipsis is not a parameter so it can follow
// a parameter with a default argument
void f(int, int);
void f(int, int = 7);
void h() {
f(3); // OK, calls f(3, 7)
void f(int = 1, int); // error: does not use default
// from surrounding scope
}
void m() {
void f(int, int); // has no defaults
f(4); // error: wrong number of arguments
void f(int, int = 5); // OK
f(4); // OK, calls f(4, 5);
void f(int, int = 5); // error: cannot redefine, even to
// same value
}
void n() {
f(6); // OK, calls f(6, 7)
}
này đã phải làm với các đối số mặc định chức năng. Những gì tôi đột quỵ là một thực tế rằng các khai báo chức năng xuất hiện ở phạm vi chức năng. Tại sao vậy? Tính năng này được sử dụng để làm gì?
Tôi đã sử dụng điều này để khai báo một hàm mà tôi biết sẽ chỉ được gọi trong phạm vi. – Atul
Câu trả lời ngắn gọn là nó hiếm khi được sử dụng. Về lý thuyết, nó có thể hữu ích nếu (ví dụ) bạn có một biến và một hàm có cùng tên. Một khai báo ở một phạm vi bên trong sẽ ẩn một khai báo ở một phạm vi bên ngoài. –