Tại sao đôi đại tràng thay vì dấu chấm?


19

tin đồn rằng việc triển khai C ++ sớm đã có toán tử dấu chấm để truy cập không gian tên. Có ý kiến ​​cho rằng dấu chấm thuận tiện hơn là toán tử dấu hai chấm hiện đại.

Lý do đằng sau việc giới thiệu dấu hai chấm là gì?


3
Ngoài đỉnh đầu của tôi, C ++ cho phép bạn làm điều ::symbolđó để tìm kiếm nó symboltrong không gian tên toàn cầu thay vì không gian tên hiện tại, do đó, ít nhất một điều sẽ trông rất khó hiểu và có thể đưa ra sự mơ hồ cú pháp hơn vào ngôn ngữ nếu toán tử chấm được sử dụng thay thế.
Ixrec

14
:: horribly :: tăng sinh xấu xí :: của không gian tên :: C ++ :: độ phân giải :: ở khắp mọi nơi là :: được biết :: như là dấu hai chấm :: ung thư.
Mason Wheeler

1
Tôi đoán nó gây ra sự nhầm lẫn trong máy phân tích ngữ nghĩa. Dot cũng được sử dụng cho các tên phương thức tiền tố, đây là một khái niệm khá giống nhau và có thể khó phân lập. Đây là một cách rõ ràng để khắc phục điều đó.
Rápli András


5
Sự gia tăng xấu xí khủng khiếp của các cuộc tấn công vô nghĩa của Mason Wheeler vào C không có tên, bởi vì cái ác đó không được trang nghiêm bằng một cái tên!
Jerry Coffin

Câu trả lời:


14

Theo quan sát của Jules , thực tế là việc triển khai C ++ sớm (CFront trước 1.0) có một dấu chấm để nhận dạng phạm vi.

Một dấu chấm cũng được sử dụng trong C với Classes (1980). Quả thực đây là một đoạn đơn giản từ Các lớp: Một cơ sở kiểu dữ liệu trừu tượng cho ngôn ngữ C 1 :

class stack {
    char    s[SIZE];  /* array of characters */
    char *  min;      /* pointer to bottom of stack */
    char *  top;      /* pointer to top of stack */
    char *  max;      /* pointer to top of allocated space */
    void    new();    /* initialization function (constructor) */
public:
    void push(char);
    char pop();
};

char stack.pop()
{
    if (top <= min) error("stack underflow");
    return *(−−top);
}

(mã là một ví dụ về cách các hàm thành viên thường được định nghĩa "ở nơi khác")

Đây ::là một trong những bổ sung cho C với Classes được giới thiệu để sản xuất C ++.

Lý do được đưa ra bởi chính Stroustrup:

Trong C with Classes, một dấu chấm được sử dụng để thể hiện tư cách thành viên của một lớp cũng như thể hiện lựa chọn thành viên của một đối tượng cụ thể.

Đây là nguyên nhân của một số nhầm lẫn nhỏ và cũng có thể được sử dụng để xây dựng các ví dụ mơ hồ. Để giảm bớt điều này, ::đã được giới thiệu có nghĩa là thành viên của lớp và .được giữ lại riêng cho tư cách thành viên của đối tượng

( Lịch sử của C ++: 1979−1991 [2] trang 21 - § 3.3.1)


  1. Bjarne Stroustrup: "Các lớp học: Cơ sở kiểu dữ liệu trừu tượng cho ngôn ngữ C" - Bell Laboratory Laboratory Báo cáo kỹ thuật khoa học máy tính CSTR − 84. Tháng 4 năm 1980.

  2. Bjarne Stroustrup: "Lịch sử của C ++: 1979−1991" - Phòng thí nghiệm của AT & T Bell Hill Hill, New Jersey 07974.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.