Rumah > pembangunan bahagian belakang > C++ > Mengapakah Penukaran Tersirat Seseorang Mengobjek kepada Rentetan Mengakibatkan Kegagalan Resolusi Lebihan?

Mengapakah Penukaran Tersirat Seseorang Mengobjek kepada Rentetan Mengakibatkan Kegagalan Resolusi Lebihan?

Barbara Streisand
Lepaskan: 2024-11-05 11:11:02
asal
645 orang telah melayarinya

Why Does Implicit Conversion of a Person Object to a String Result in Overload Resolution Failure?

Kegagalan Penyelesaian Lebih Muatan Semasa Penukaran Tersirat Objek kepada Rentetan

Penukaran rentetan tersirat secara amnya tidak digalakkan, dengan lebihan operator untuk Orang menjadi penyelesaian yang lebih sesuai. Walau bagaimanapun, mari kita periksa kod berikut untuk menggambarkan isu:

<code class="cpp">#include <string>
#include <ostream>
#include <iostream>

struct NameType {
   operator std::string() { return "wobble"; }
};

struct Person {
   NameType name;
};

int main() {
   std::cout << std::string("bobble");
   std::cout << "wibble";

   Person p;
   std::cout << p.name; // Error occurs here
}</code>
Salin selepas log masuk

Kod menyusun tanpa ralat apabila menggunakan GCC 4.3.4, memberikan output:

<code class="Bash">bobble
wibble</code>
Salin selepas log masuk

Walau bagaimanapun, cuba untuk secara tersirat menukar objek Orang kepada rentetan menggunakan << operator gagal dengan ralat resolusi beban lampau:

<code class="Bash">prog.cpp:18: error: no match for ‘operator<<’ in ‘std::cout << p.Person::name’</code>
Salin selepas log masuk

Dalam keadaan ini, operator << terlampau beban untuk mengendalikan std::string dan const char*, walau bagaimanapun, tidak terdapat lebihan pratakrif yang menerima objek Person dan secara tersirat menukarnya kepada rentetan. Akibatnya, pengkompil gagal menyelesaikan lebihan beban.

Untuk membetulkan isu ini, anda harus menentukan operator eksplisit << untuk struct Orang sebagai fungsi rakan, membenarkan penukaran tersirat daripada objek Orang kepada rentetan berfungsi dengan betul.

Atas ialah kandungan terperinci Mengapakah Penukaran Tersirat Seseorang Mengobjek kepada Rentetan Mengakibatkan Kegagalan Resolusi Lebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan