Tôi có ba đoạn mã. Điều này:Tại sao khởi tạo kép này bằng dấu phẩy bất hợp pháp?
1,7; //yes, that's all the code
biên dịch được. Điều này:
double d = (1, 7);
cũng biên dịch được. Tuy nhiên, điều này:
double d = 1, 7;
không biên dịch được. gcc-4.3.4 nói
error: expected unqualified-id before numeric constant
và Visual C++ 10 nói
error C2059: syntax error : 'constant'
chênh lệch Tại sao như vậy? Tại sao không phải tất cả ba biên dịch với ,
có cùng tác dụng trong cả ba?
Tôi nghĩ rằng ngữ pháp sẽ thực sự khá phức tạp khi xử lý 'double d = 1, 7; 'như một khai báo đơn, với' 1, 7' làm biểu thức khởi tạo, trong khi xử lý 'double d = 1, e = 7; 'là hai người khai báo. Hoặc bạn sẽ đi xa hơn nữa, và nói rằng nếu đã có một 'e' trong phạm vi thì' double d = 1, e = 7; 'cũng * cũng * được coi là một khai báo đơn, với biểu thức khởi tạo' 1, e = 7'? Tôi thấy rất nhiều tiềm năng cho sự nhầm lẫn, chỉ để tiết kiệm gõ một vài parens trong trường hợp 'double d = (1, 7);' đó là vô nghĩa anyway. –