Trong [dcl.attr.depend]/1, tôi đọc:Trong C++ 11, làm cách nào để xác định rằng tham số ngầm định "this" "[[carry_dependency]]"?
Thuộc tính [...]
carries_dependency
[...] có thể được áp dụng chodeclarator-id
của mộtparameter-declaration
trong một tuyên bố chức năng hoặc lambda, trong trường hợp đó, nó chỉ ra rằng việc khởi tạo tham số mang phụ thuộc vào (1.10) mỗi chuyển đổi từ rvalue-to-rvalue (4.1) của đối tượng đó. Thuộc tính cũng có thể được áp dụng cho cácdeclarator-id
của một tuyên bố chức năng , trong trường hợp nó xác định rằng giá trị trả về, nếu có, mang một sự phụ thuộc vào việc đánh giá biểu thức cuộc gọi hàm.
Điều tôi thiếu là cách áp dụng thuộc tính cho tham số ngụ ý this
.
Bằng một ví dụ, hãy xem xét chức năng miễn phí này:
void fun(int i, Foo * [[carries_dependency]] f);
và nó tương đương (nhưng đối với các thuộc tính) phiên bản thành viên:
void Foo::fun(int i); // can't add [[carries_dependency]] here?
Tôi khá chắc chắn rằng nó có thể được thực hiện, nhưng bạn sẽ phải xem cú pháp trong tiêu chuẩn. Tôi có thể đoán rằng nó sẽ giống như '[[mang_dependency]] void fun (int);' hoặc 'void fun (int) [[mang_dependency]];' trong khai báo. –
@David Rodríguez - dribeas Nếu tôi đọc đúng ngữ pháp, trước đây áp dụng thuộc tính cho giá trị trả về của hàm (nếu có) trong khi hàm sau không được phép. –
@MarkB: 8.4.1p2 dường như chỉ ra rằng các thuộc tính hàm là các phần tử cuối cùng trong khai báo hàm. –