Pendapat Const dan Bukan Const: Penyelesaian Elegan
Pendapat yang terlebih muatan dengan varian const dan bukan const menimbulkan teka-teki pengaturcaraan. Melaksanakan secara langsung satu daripada yang lain mengakibatkan ralat penyusunan, memaksa pembangun untuk mengambil jalan keluar. Adakah terdapat pendekatan yang lebih anggun?
Cabaran
Pertimbangkan kelas berikut dengan kaedah getSomething:
class Foobar { public: Something& getSomething(int index); const Something& getSomething(int index) const; };
Melaksanakan satu kaedah menggunakan yang lain tidak boleh dilaksanakan kerana ketidakupayaan versi const untuk memanggil versi bukan const. Casting adalah perlu, tetapi ia terasa menyusahkan dan boleh menyebabkan kekeliruan.
Penyelesaian: Cast dengan Berhati-hati
Effective C mencadangkan membuang const daripada fungsi const ke melaksanakan fungsi bukan const. Walaupun tidak menarik secara visual, ia adalah pendekatan yang selamat. Memandangkan fungsi ahli bukan const sedang dipanggil, objek mestilah bukan const dan membuang const adalah dibenarkan.
Berikut ialah contoh:
class Foo { public: const int& get() const; int& get(); }; const int& Foo::get() const { // Non-trivial work return foo; } int& Foo::get() { return const_cast<int&>(const_cast<const Foo*>(this)->get()); }
Dengan mengikuti pendekatan ini , anda boleh mencapai pelaksanaan const selamat jenis dan bukan const getter tanpa mengorbankan prestasi atau memperkenalkan kerumitan yang tidak perlu.
Atas ialah kandungan terperinci Const vs. Non-Const Getters: Adakah Terdapat Cara yang Lebih Baik Daripada Casting?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!