Cho đến nay tôi biết rằng nếu bạn muốn vượt qua một giá trị mặc định cho một cuộc tranh cãi với một chức năng đó là một đối tượng, bạn làm điều đó như thế này:giá trị đối tượng mặc định trong chức năng với đối số mặc định giá trị
void function(MyObject obj = MyObject()){
...
}
Tuy nhiên , Tôi đã đi xung quanh với một số cú pháp thú vị gần đây, mà confuses tôi. Điều gì sẽ xảy ra khi chúng ta gọi hàm như thế này?
void function(MyObject obj = 0){
...
}
Lưu ý, chúng tôi đang truyền một đối tượng chứ không phải con trỏ. Đoạn mã trên biên dịch tốt, không có lỗi hoặc cảnh báo. Và điều này luôn luôn kêu gọi các nhà xây dựng với một đối số - MyObject được định nghĩa như thế này:
class MyObject{
public:
MyObject(double n){std::cout << "Argumented\n";}
MyObject(){std::cout << "Default\n";}
};
Ngoài ra, nơi được hành vi này ghi nhận (vì tôi đã tìm kiếm và không thể tìm thấy nó)?
Chương C++ tiêu chuẩn 4 (Chuyển đổi chuẩn) và chương 12.3 (Các chức năng thành viên đặc biệt/Chuyển đổi). Và cũng có 13.3.3.1 (chuỗi covnersion ngầm). – jrok
@jrok Cảm ơn rất nhiều. –
Bạn được chào đón. Các số chương là từ dự thảo n3337 nhưng tôi mong đợi chúng sẽ giống nhau trong tiêu chuẩn chính thức (C++ 11). – jrok