2015-07-22 35 views
5

szedłem tym articleJak to jest najbardziej irytującą parse?

i znajduje się zdanie w punkcie 3 mówi

// C++98 
rectangle  w(origin(), extents());  // oops, vexing parse 

jak jest powyżej najbardziej irytującej przetworzenia. Jeśli zrobiłem coś jak ten

struct origin 
{ 
}; 
struct Rectangle 
{ 
    Rectangle(const origin& s) 
    { 
    } 
}; 

rachunku

Rectangle s(origin());  

działa dobrze i nie przypominają podyktowane parse. Dlaczego autor powiedział, że to irytująca analiza. Czy to literówka, czy coś mi brakuje?

+0

Zobacz rozdział 1 (b) dokumentu, wyjaśniający te kłopotliwe analizy. – Barmar

+3

Dlaczego mówisz 'Rectangle s (origin());' nie przypomina uciążliwego parse? Jest kanonicznym przykładem najbardziej irytującej analizy. Jak myślisz, co najbardziej denerwuje, jeśli nie tak? –

+1

Deklaracja działa poprawnie. Spróbuj * użyć * 's' i zobaczyć, co się stanie. – molbdnilo

Odpowiedz

8

Rectangle s(origin()); to także irytująca analiza. Deklaruje funkcję s, która zwraca rectangle i przyjmuje jako wskaźnik argumentu funkcję zwracającą origin. Nie wiesz, co masz na myśli, mówiąc "działa dobrze".

rectangle w(origin(), extents()); deklaruje funkcję w powracającego rectangle i biorąc argumenty: wskaźnik funkcjonować powrocie origin, a wskaźnik funkcjonować powrocie extents.

Aby uzyskać więcej informacji na temat see this question lub przejrzyj pozostałe pytania pod znacznikiem .

+0

Działając dobrze, miałem na myśli, że kompiluje się bez błędów. Mam wrażenie, że uciążliwa analiza dałaby błąd podczas kompilacji. na przykład dla klasy 'foo' używającej jej jak' foo a(); 'dałoby błąd podczas kompilacji i jest formą najbardziej irytującej analizy. –

+0

@James Franco, dopóki nie spróbujesz go użyć, tak jak jest to obiekt – sbabbi

+3

@JamesFranco, jeśli nie jest to prawidłowa deklaracja, wtedy nie będzie to irytująca analiza. Część "drażniąca" polega na tym, że próbowałeś zapisać deklarację zmiennej, ale okazało się, że jest ona składniowo poprawna jako deklaracja funkcji. Deklaracje funkcji są oczywiście zgodne z prawem. –