2010-05-28 31 views
5

Từ Herb Sutter GotW #6Khi nào một kiểu trả về const can thiệp vào việc tạo mẫu?

Return-by-giá trị bình thường nên const với nhiều loại trở lại không dựng sẵn. ...

Lưu ý: Lakos (. Pg 618) lập luận chống lại trở về giá trị const, và lưu ý rằng nó là không cần thiết cho builtins nào (ví dụ, trở về "int const"), mà ông lưu ý có thể gây trở ngại cho mẫu instantiation.

Trong khi Sutter dường như không đồng ý về việc trả lại giá trị const hoặc giá trị không const khi trả về một đối tượng không được xây dựng theo giá trị với Lakos, ông thường đồng ý trả về giá trị const trong loại (ví dụ const int) không phải là một ý tưởng tốt.

Trong khi tôi hiểu tại sao điều đó vô dụng vì giá trị trả về không thể sửa đổi vì nó là giá trị, tôi không thể tìm thấy ví dụ về cách có thể ảnh hưởng đến việc khởi tạo mẫu.

Vui lòng cho tôi ví dụ về cách có bộ định dạng const cho loại trả về có thể ảnh hưởng đến việc khởi tạo mẫu.

Trả lời

3

Dưới đây là một ví dụ đơn giản liên quan đến chức năng gợi ý:

const int f_const(int) { return 42; } 
int f(int) { return 42; } 

template <typename T> 
void g(T(*)(T)) 
{ 
    return; 
} 

int main() 
{ 
    g(&f_const); // doesn't work: function has type "const int (*)(int)" 
    g(&f);  // works: function has type "int (*)(int)" 
} 

Lưu ý rằng Visual C++ 2010 không đúng cách chấp nhận cả hai. Comeau 4.3.10 và g ++ 4.1.2 chính xác không chấp nhận cuộc gọi g(&f_const).

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