Mengapa menggandakan titik dua bukan titik?

19

Hal ini dikabarkan bahwa awal C ++ implementasi memiliki operator titik untuk akses namespace. Ada pendapat bahwa titik lebih nyaman daripada operator usus besar modern.

Apa alasan di balik memperkenalkan usus besar?

Kaya
sumber
3
Dari atas kepala saya, C ++ memungkinkan Anda lakukan ::symboluntuk memaksanya untuk mencari symboldi namespace global, bukan namespace saat ini, jadi itu setidaknya satu hal yang akan terlihat sangat membingungkan dan mungkin memperkenalkan ambiguitas sintaksis yang lebih dalam bahasa jika operator titik digunakan sebagai gantinya.
Ixrec
14
:: proliferasi yang jelek :: jelek :: dari :: namespace C ++ :: resolusi :: operator di mana-mana :: dikenali :: sebagai kolon :: kanker.
Mason Wheeler
1
Saya kira itu menyebabkan kebingungan dalam analisa semantik. Dot juga digunakan untuk nama metode awalan, yang merupakan konsep yang sangat mirip dan mungkin sulit untuk diisolasi. Ini adalah cara yang jelas untuk memperbaikinya.
Rápli András
2
Beberapa hipotesis dalam Mengapa C ++ memerlukan operator resolusi lingkup?
manlio
5
Proliferasi jelek mengerikan dari serangan tidak masuk akal Mason Wheeler pada C tidak memiliki nama, karena kejahatan seperti itu tidak boleh bermartabat dengan nama!
Jerry Coffin

Jawaban:

14

Seperti yang diamati oleh Jules itu fakta bahwa implementasi C ++ awal (CFront pra-1.0) memiliki titik untuk identifikasi ruang lingkup.

Sebuah titik juga digunakan dalam C with Classes (1980). Memang ini adalah cuplikan sederhana dari Kelas: Fasilitas Tipe Data Abstrak untuk Bahasa 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);
}

(kode adalah contoh bagaimana fungsi anggota biasanya didefinisikan "di tempat lain")

Itu ::adalah salah satu tambahan C dengan Kelas diperkenalkan untuk menghasilkan C ++.

Alasannya diberikan oleh Stroustrup sendiri:

Dalam C with Classes, sebuah titik digunakan untuk mengekspresikan keanggotaan suatu kelas serta mengekspresikan pemilihan anggota objek tertentu.

Ini telah menjadi penyebab beberapa kebingungan kecil dan juga dapat digunakan untuk membangun contoh-contoh yang ambigu. Untuk meringankan ini, ::diperkenalkan berarti keanggotaan kelas dan .dipertahankan secara eksklusif untuk keanggotaan objek

( A History of C ++: 1979−1991 [2] halaman 21 - § 3.3.1)


  1. Bjarne Stroustrup: "Kelas: Fasilitas Tipe Data Abstrak untuk Bahasa C" - Bell Laboratories Laporan Teknis Ilmu Komputer CSTR − 84. April 1980.

  2. Bjarne Stroustrup: "A History of C ++: 1979−1991" - Laboratorium AT&T Bell Murray Hill, New Jersey 07974.

manlio
sumber