À, ,ý mình ở trên không phải là bảo syntax của C phức tạp, mà là cách viết hđh sử dụng C nó quá là kinh dị. Căn bản là C có những công cụ mạnh: con trỏ, con trỏ hàm, raw memory access, những công cụ này kết hợp lại với nhau làm cho đoạn code nhiều khi khó hiểu. Người viết, người dùng code đó thì dễ, nhưng người đọc, người bảo trì thì thấy nó khó. Mình đã từng đọc những đoạn code viết từ 1996 dùng chuẩn C89 và nhận ra là mình chả hiểu cmg luôn

Còn về phần thằng C++ thì mình đồng ý với bác, syntax lung tung cả lên, mỗi version mới lại khác 1 tí nhưng vẫn phải tương thích với cái cũ, thành ra giờ nó thành đống lằng nhằng. Còn về mấy cái value category mình không để ý lắm, chỉ quan tâm đến reference và rvalue reference thôi (mấy cái này ở những project nhỏ thì ko thấy tác dụng lắm, đụng tới object lớn mới thấy rõ).
Nhân tiện nói về khởi tạo biến, mình có câu đố nho nhỏ.
Trong các cách khởi tạo dưới đây, khởi tạo nào là hợp lệ (không dùng IDE hoặc Compiler để check nha, như vậy là ăn gian)
C++:
int a = 3; //1
int a = int(3); //2
int a {3}; //3
int a = int{3}; //4
int a; //5
int a{}; //6
int a(); //7
auto a = 5; //8
auto a{5}; //9
auto a(5); //10
auto a; //11
auto a{}; //12
auto a(); //13
Chuẩn C++ mình đang sử dụng là c++11.