Bản nháp làm việc gọi rõ ràng rằng các hàm mặc định phải là các hàm thành viên đặc biệt (ví dụ: hàm sao chép, hàm tạo mặc định, vv, (§8.4.2.1-1)). Mà làm cho cảm giác hoàn hảo.Có thể chức năng nào bị xóa không?
Tuy nhiên, tôi không thấy bất kỳ hạn chế nào như vậy trên các chức năng đã xóa (§8.4.3). Có đúng không?
Hay nói cách khác là ba ví dụ này hợp lệ c++0
?
struct Foo
{
// 1
int bar(int) = delete;
};
// 2
int baz(int) = delete;
template< typename T >
int boo(T t);
// 3
template<>
int boo<int>(int t) = delete;
Chức năng bị xóa là gì? – Puppy
Chức năng đã xóa là một chức năng đã tồn tại nếu nó chưa bị xóa. Ví dụ. bạn có thể xóa ctor sao chép lớp. Điều này là hơi cao hơn để làm cho nó tư nhân unimplemented, vì hai lý do. 1. nó rõ ràng hơn khi đọc mã và 2. bạn có thể nhận được một thông báo lỗi rõ ràng hơn. – MSalters
@MSalters: Bạn cũng có thể xóa các chức năng không tồn tại, ngăn chặn việc sử dụng chúng. Ví dụ. cho 'void f (double); void f (int) = delete; ', f (42) bây giờ là một lỗi thay vì sử dụng chuyển đổi ngầm định. –