To jest deklaracja funkcji. Punkt 8,2/1 C++ 11 standardowych opisano poniżej:
Niejednoznaczność wynikająca z podobieństwa pomiędzy obsadą funkcji stylu oraz zgłoszenia wymienionego w 6,8 mogą również występować w kontekście zgłoszenia. W tym kontekście wybór znajduje się pomiędzy deklaracją funkcji z redundantnym zestawem nawiasów wokół nazwy parametru i deklaracją obiektu z funkcją stylu rzutowaną jako inicjator. Podobnie jak w przypadku niejednoznaczności wymienionych w 6.8, , należy rozważyć każdy konstrukt , który może być deklaracją o deklaracji.
Standard zapewnia także przykład:
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
}
Deklaracja w przykładzie deklaruje funkcję, która pobiera float
i zwraca X
, czego dowodem jest (non-wypalania) twierdzenie statycznego w Poniższy program (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, "!");
}
to jest deklaracja –
@Mahmoud Al-Qudsi - masz rację. jest on powiązany z –