2010-06-02 63 views
5

Ai đó gần đây đã hỏi tôi sự khác biệt giữa toán tử chuẩn C++ (ví dụ: new, delete, sizeof) và hàm (ví dụ: tan, free, malloc). Theo "chuẩn", tôi có nghĩa là các bộ lọc được cung cấp theo mặc định của bộ biên dịch và không được người dùng xác định. Dưới đây là những câu trả lời tôi đã đưa ra, mặc dù không có vẻ thỏa đáng.Toán tử vs Hàm trong C/C++

(1) Nhà điều hành không cần phải bao gồm bất kỳ tiêu đề nào để sử dụng: Ví dụ: bạn có thể thực hiện cuộc gọi mới mà không bao gồm bất kỳ tiêu đề nào. Tuy nhiên, một chức năng (nói miễn phí()) không cần tiêu đề bao gồm, bắt buộc.

(2) Toán tử được định nghĩa như vậy (ví dụ như toán tử lớp) ở đâu đó trong tiêu đề chuẩn. Một hàm không phải là.

Bạn có thể phê bình những câu trả lời này và cung cấp cho tôi ý tưởng tốt hơn về sự khác biệt không?

+0

là "xóa" được sử dụng trong cả hai bộ cố ý? – Sev

+0

Xem http://stackoverflow.com/questions/184537/in-what-cases-do-i-use-malloc-vs-new – nico

+0

Không, sửa ngay bây giờ – PKG

Trả lời

11

Nhà khai thác là từ khóa với cú pháp cố định. Những cái có thể bị quá tải có thể thay đổi một chút về cú pháp, nhưng nó nằm trong ranh giới. Toán tử new vẫn được viết là new, ngay cả khi quá tải và cú pháp gọi nó luôn giống nhau.

Tên chức năng là số nhận dạng, có thể gần như tùy ý. Không có lý do cú pháp nào mà bạn không thể thực hiện với malloc() và sử dụng

bool my_fancy_alloc(void*& memory, unsigned char size, bool zero_it); 

thay thế. (Mark: Có các lý do khác. Tuy nhiên, giống như sự tỉnh táo của đồng nghiệp.)

+1

+1. Tôi đoán câu hỏi là sai khi bắt đầu (các toán tử so với các hàm?), Nhưng câu trả lời của bạn làm nổi bật các từ khóa và mã định danh sẽ trả lời tất cả. – paercebal

4

(1) không đúng. typeid là một toán tử, nhưng việc sử dụng nó yêu cầu bạn bao gồm <typeinfo>.

Câu trả lời của tôi đơn giản là các toán tử được định nghĩa như vậy. Ví dụ: :: không nhất thiết phải được coi là nhà điều hành, nhưng tiêu chuẩn cho biết, và như vậy là vậy.

Nếu bạn đang tìm kiếm câu trả lời dài dòng hơn, tôi sẽ đề cập đến các nhà khai thác hầu hết không trông giống như các chức năng như. Và những người làm [sizeoftypeid] không hoạt động như chức năng; toán hạng của chúng không được đánh giá khi chạy.

+0

Cảm ơn. Nhưng điều gì xảy ra với các toán tử C thuần túy (chẳng hạn như +)? Họ không thể là nhà khai thác lớp học, nhưng họ là nhà khai thác vì tiêu chuẩn C nói như vậy? – PKG

+0

@user: Tôi không hiểu bạn đang hỏi gì. 'toán tử +' có thể bị quá tải cho các lớp. –

2

Nhà khai thác có cú pháp đặc biệt, ví dụ: bạn có thể sử dụng new (hoặc +) mà không đặt đối số trong dấu ngoặc vuông sau tên toán tử.

0

tên chức năng hiểu biết của tôi là biểu diễn của toán tử goto, sau khi nhảy đến một ứng dụng vị trí mã cụ thể có thể thực hiện một đến nhiều đơn vị công việc, mặt khác một nhà điều hành thực hiện một đơn vị công việc thực tế.

0

Toán tử và chức năng giống khái niệm. Cả hai đều lấy một số giá trị làm đầu vào và trả về một số giá trị như đầu ra. Chúng chỉ khác biệt là có cú pháp.