Đó là tuyên bố chức năng. Đoạn 8.2/1 của C++ 11 Chuẩn giải thích điều này:
Sự mơ hồ phát sinh từ sự tương đồng giữa một dàn diễn viên chức năng theo phong cách và một tuyên bố đề cập trong 6,8 cũng có thể xảy ra trong bối cảnh của một bản tuyên bố. Trong bối cảnh đó, sự lựa chọn nằm giữa một khai báo hàm với một bộ ngoặc đơn dư thừa xung quanh tên tham số và khai báo đối tượng có kiểu hàm làm trình khởi tạo. Cũng giống như những sự mơ hồ được đề cập trong 6.8, độ phân giải là xem xét bất kỳ cấu trúc nào có thể có thể là tuyên bố một tuyên bố.
Tiêu chuẩn cũng cung cấp một ví dụ:
struct S {
S(int);
};
void foo(double a) {
S w(int(a)); // function declaration <=== Your example
S x(int()); // function declaration
S y((int)a); // object declaration
S z = int(a); // object declaration
}
Việc kê khai trong ví dụ của bạn tuyên bố một chức năng mà phải mất một float
và trả về một X
, như được chứng tỏ sự (không bắn) khẳng định tĩnh trong chương trình sau (live example):
#include <type_traits>
struct X
{
X(float) {}
};
int const x = 3;
X f(float(x));
int main()
{
static_assert(std::is_same<decltype(f), X(float)>::value, "!");
}
Nguồn
2013-06-26 21:48:06
Đó là tuyên bố –
@Mahmoud Al-Qudsi - bạn hoàn toàn đúng. nó có liên quan –