5.3.4 Nowy [expr.new]
....
Nowy typ ID:
typu specyfikator-nastnowych declaratoropcjonalnie
nowych declarator:
PTR-operator nowej declaratoropcjonalnie
noptr-nowego declarator
noptr-nowego declarator:
[ ekspresji ] atrybut specyfikator-nastopcjonalnie
noptr-nowego declarator [ stałej ekspresji ] atrybut specyfikator-nast opcjonalnie
....
nowego typu ID w nowy- wyrażenie jest najdłuższą z możliwych sekwencji nowych deklaratorów. [ Uwaga: to zapobiega niejednoznaczności między operatorami declarator &
, &&
, *
i []
i ich odpowiedniki ekspresji.- koniec uwaga] [Przykład:
new int * i; // syntax error: parsed as (new int*) i, not as (new int)*i
*
jest declarator wskaźnik i nie operator mnożenia. - przykład koniec]
[Uwaga: nawiasach w nowego typu ID z nowej ekspresji może mają zaskakujące efekty. [Przykład:
new int(*[10])(); // error
jest źle ukształtowany, ponieważ wiązanie jest
(new int) (*[10])(); // error
Zamiast jawnie nawiasach wersja operatora new
mogą być wykorzystywane do tworzenia przedmiotów typów związków (3.9. 2):
new (int (*[10])());
przydziela tablicę 10 wskaźników do funkcji (bez żadnego argumentu) i powracając: int
. - koniec przykład] - koniec uwaga]
pokrewne (ale nie powielać): http://stackoverflow.com/q/16634713/1505939 –
Ponieważ * Nowy typ-id * może nie zawierają nawiasów. Ale to oczywiście nie jest satysfakcjonująca odpowiedź. – dyp
Może to ma związek z ujednoznacznieniem; na przykład 'new int()' może być interpretowane jako próbujące przydzielić funkcję 'int (void)' – dyp