2012-04-27 34 views
7

Tôi đã tạo một hàm chấp nhận con trỏ hàm, ví dụ:Có an toàn khi gán nullptr cho biến con trỏ hàm không?

typedef CString(*GetLabelFunc)(const CSomeObject* const pObject); 

void DoSomething(GetLabelFunc funcGetLabel); 

Hàm có thể nhận con trỏ rỗng và trả về một chuỗi rỗng trong trường hợp đó. Điều này hoạt động hoàn toàn tốt trong MSVC++ 2010 khi sử dụng NULL và nullptr như tham số là tốt - nhưng tôi không xem xét một biên dịch thành công một bến cảng an toàn trong các trường hợp đặc biệt ...

Bây giờ tôi tự hỏi nếu đi qua nullptr tương đương với NULL cho con trỏ hàm. Lý do tại sao tôi yêu cầu là ví dụ void* không chấp nhận con trỏ hàm (hoặc ít nhất nó không nên được sử dụng). Vì vậy, có thể có một lý do tương tự mà nullptr không nên được sử dụng cho các con trỏ hàm - nghĩa là nó được thiết kế để làm việc cho các con trỏ đối tượng?

Trả lời

8

Có, nullptr được chỉ định là có thể chuyển đổi thành giá trị con trỏ null cho tất cả các loại con trỏ, bao gồm các loại con trỏ hàm.

Xem [conv.ptr] 4.10/1 và [basic.compound] 3.9.2/3.

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