Pertanyaan ini membuat saya bertanya-tanya apakah pernah berguna / perlu untuk sepenuhnya memenuhi syarat nama kelas (termasuk operator lingkup global) dalam definisi fungsi anggota di luar kelas.
Di satu sisi, saya belum pernah melihat ini dilakukan sebelumnya (dan sintaksis untuk melakukannya tampaknya tidak jelas). Di sisi lain, pencarian nama C ++ sangat tidak sepele, jadi mungkin ada kasus sudut.
Pertanyaan:
Apakah pernah ada kasus di mana memperkenalkan definisi fungsi anggota di luar kelas dengan
ReturnType (::Fully::Qualified::Class::Name::MemberFunctionName)(...) { ... }
berbeda dari
ReturnType Fully::Qualified::Class::Name::MemberFunctionName(...) { ... }
(tidak ada ::
awalan lingkup global )?
Perhatikan bahwa definisi fungsi anggota harus dimasukkan ke dalam namespace yang menyertakan kelas, jadi ini bukan contoh yang valid.
Jawaban:
Sebuah menggunakan-direktif dapat menyebabkan
Fully
menjadi ambigu tanpa kualifikasi.sumber
Ini penting jika seseorang adalah seorang masokis dan suka menulis hal-hal seperti ini
Seseorang tentu saja dapat menulis kelebihan kedua seperti
foo::foo::bar::baz
dalam lingkup global, tetapi pertanyaannya adalah apakah kedua deklarasi tersebut dapat memiliki makna yang berbeda. Saya tidak akan merekomendasikan menulis kode seperti itu.sumber
using
. Senang memiliki berbagai kasus yang disorot!Jika direktif menggunakan digunakan maka mungkin ada kode yang membingungkan.
Pertimbangkan program demonstratif berikut
Jadi untuk keterbacaan nama yang memenuhi syarat ini
menunjukkan dengan tepat di mana fungsi tersebut dideklarasikan.
sumber