5.3.4 mới [expr.new]
....
kiểu mới-id:
type-specifier-seqmới declaratoropt
mới declarator:
ptr-operator new-declaratoropt
noptr-new-declarator
noptr-new-declarator:
[ biểu ] thuộc tính-specifier-seqopt
noptr-new-declarator [ liên tục thể hiện ] thuộc tính-specifier-seq opt
....
Các kiểu mới-id trong một mới- biểu thức là chuỗi dài nhất có thể của người khai báo mới. [Lưu ý: điều này ngăn cản sự mơ hồ giữa các toán tử khai báo &
, &&
, *
và []
và đối sánh biểu thức của chúng.- cuối note] [Ví dụ:
new int * i; // syntax error: parsed as (new int*) i, not as (new int)*i
Các *
là declarator con trỏ và không phải là toán tử nhân. - cuối dụ]
[Note: ngoặc đơn trong một kiểu mới-id của một mới thể hiện thể có tác dụng đáng ngạc nhiên. [Ví dụ:
new int(*[10])(); // error
là vô hình thành vì các ràng buộc là
(new int) (*[10])(); // error
Thay vào đó, phiên bản ngoặc một cách rõ ràng của new
hành có thể được sử dụng để tạo các đối tượng của các loại hợp chất (3.9. 2):
new (int (*[10])());
phân bổ một mảng 10 con trỏ đến hàm (không tham gia đối số) và trả lại int
. - cuối dụ] - cuối note]
liên quan (nhưng không trùng lặp): http://stackoverflow.com/q/16634713/1505939 –
Bởi vì một * kiểu mới-id * may không chứa dấu ngoặc đơn. Nhưng đó là tất nhiên không phải là một câu trả lời thỏa mãn. – dyp
Có thể điều này liên quan đến việc định hướng; ví dụ. 'new int()' có thể được hiểu là cố gắng phân bổ một hàm 'int (void)' – dyp