thảo luận [C++] Thớt bàn luận, hỏi đáp thắc mắc về C++

  • Người tạo chủ đề Người tạo chủ đề luiz
  • Ngày bắt đầu Ngày bắt đầu
Muốn syntax chặt chẽ, học java.
Muốn sử dụng ngôn ngữ hiệu năng mạnh, tiếp cận được các interface phần cứng, học C++. Syntax của C++ nó hơi lộn xộn (một phần vì trải qua nhiều version khác nhau).
Muốn nói chuyện được với chúa, học C.
 
học C để hiểu cách hoạt động của HĐH, còn học syntax thì chỉ phí thời gian thôi
 
Bác chắc chưa, nó kinh dị lắm đó



Syntax C đơn giản mà.
C++ mới kinh dị. Có ai nhớ có bao nhiêu cách khởi tạo biến trong C++ không? Nào là direct initialization, zero initialization, rồi thì value initialization và initialization list. C chỉ có 1 thôi.
Có bao nhiêu value category trong C++? 5 cái tất cả, gồm lvalue, glvalue, xvalue, glvalue và prvalue. Còn C chỉ có rvalue và lvalue thôi.

Type trong C chỉ có type nguyên gốc, const và con trỏ. Còn C++ có thêm reference và rvalue reference (vâng, cái này không liên quan gì đến rvalue đã nói ở trên đâu). Tức là ta có int, int&, int&& là 3 type khác nhau.

Đó là chưa nói gì đến template.
Làm việc với C++ thì phải thủ sẵn reference bên cạnh chỉ để tra cứu syntax của nó xem mình có thiếu dấu chấm hay thừa cặp ngoặc nhọn ở đâu đó không. Còn với C hay ngôn ngữ khác thì người ta tra cứu library thôi.

Sent from Xiaomi Redmi 5A using vozFApp
 
Sửa lần cuối:
Mấy bác cho em hỏi là từ C++ qua Java nhanh không ạ :). Sẵn tiện có nguồn nào học Java ổn ổn thì mọi người giới thiệu cho em với luôn ạ, em cám ơn :).
 
Tại sao không phải là python ? :rolleyes:
HMTL, CSS, JS, Python. Chơi từ front-end tới back-end đá qua data analysis + machine learning luôn. Best way.:sleep:
 
Syntax C đơn giản mà.
C++ mới kinh dị. Có ai nhớ có bao nhiêu cách khởi tạo biến trong C++ không? Nào là direct initialization, zero initialization, rồi thì value initialization và initialization list. C chỉ có 1 thôi.
Có bao nhiêu value category trong C++? 5 cái tất cả, gồm lvalue, glvalue, xvalue, glvalue và prvalue. Còn C chỉ có rvalue và lvalue thôi.

Type trong C chỉ có type nguyên gốc, const và con trỏ. Còn C++ có thêm reference và rvalue reference (vâng, cái này không liên quan gì đến rvalue đã nói ở trên đâu). Tức là ta có int, int&, int&& là 3 type khác nhau.

Đó là chưa nói gì đến template.
Làm việc với C++ thì phải thủ sẵn reference bên cạnh chỉ để tra cứu syntax của nó xem mình có thiếu dấu chấm hay thừa cặp ngoặc nhọn ở đâu đó không. Còn với C hay ngôn ngữ khác thì người ta tra cứu library thôi.

Sent from Xiaomi Redmi 5A using vozFApp
À, ,ý 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.
 
À, ,ý 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.
Tất cả đều hợp lệ nhé
 
học C để hiểu cách hoạt động của HĐH, còn học syntax thì chỉ phí thời gian thôi

Mình thấy cũng ko đúng lắm chính xác là hệ điều hành chạy Assembly, tất cả các ngôn ngữ khác đều biên dịch qua cái này. Cho nên muốn hiểu hệ điều hành chạy như thế nào thì phải master Assembly.

8-)
 
À, ,ý 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õ).

Mình thấy đây là 2 mặt của một vấn đề thôi: Cú pháp đơn giản --> công cụ quá cơ bản --> phải làm nhiều việc hơn để đạt mục đích --> khó đọc.
Ngược lại, C++ ngoài những công cụ đó nó còn cung cấp thêm một đống thứ khác tương tự: functor, function object, bind, lambda, std::function<>, cú pháp phức tạp hơn nhưng nếu nắm được thì dễ đọc hơn.

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.

Tất cả những cái có auto không kèm giá trị khởi tạo đều không hợp lệ.
Riêng cái int a() và auto a() là khai báo hàm, không phải khởi tạo biến.
 
Nên bắt đầu luyện Algorithms & DS với C++, học C++ rồi cũng dễ chuyển qua các ngôn ngữ khác. Còn Java vs C# theo mình nếu để tìm hiểu sâu về OOP và có thể ứng dụng mọi nền tảng thì Java. Học C++ trước qua Java cũng khá dễ dàng lúc này hiểu sâu hơn về vấn đề con trỏ.
 

Thống kê chủ đề

Ngày tạo
luiz,
Người trả lời cuối
No1Crab,
Trả lời
1.008
Lượt xem
116.258
Quay lại
Lên đầu trang