Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bilakah Permulaan Seragam C Menjadi \'Penghuraian Paling Menjengkelkan\'?

Bilakah Permulaan Seragam C Menjadi \'Penghuraian Paling Menjengkelkan\'?

DDD
DDDasal
2024-11-01 21:37:291050semak imbas

When Does C   Uniform Initialization Become the

Memahami Kekaburan "Paling Menjengkelkan" dalam Pemula Seragam C

"penghuraian paling menjengkelkan" merujuk kepada kekaburan yang boleh timbul apabila menggunakan sintaks permulaan seragam dalam C 11. Kekaburan ini berlaku apabila tidak jelas sama ada ungkapan kod sedang memulakan objek atau memanggil fungsi yang mengembalikan objek.

Untuk menggambarkan kekaburan ini, pertimbangkan kod berikut:

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

class Timer
{
public:
    Timer() {}
};

int main() 
{
    // Case 1: Initializing an object
    auto dv = Timer();

    // Case 2: Calling a function
    int time_keeper(Timer());

    return 0;
}</code>

Kes 1: Memulakan Objek

Dalam kes pertama, auto dv = Pemasa() memulakan objek jenis Pemasa dipanggil dv. Jenis dv disimpulkan sebagai Pemasa kerana kami menggunakan auto untuk mengisytiharkannya.

Kes 2: Memanggil Fungsi

Dalam kes kedua, int time_keeper(Pemasa ()) mengisytiharkan fungsi yang dipanggil time_keeper yang mengembalikan int dan mengambil sebagai hujahnya penunjuk kepada fungsi yang mengembalikan Pemasa dan tidak mengambil hujah.

Sebab mengapa hujah itu bukan Pemasa (*) () adalah yang berfungsi mereput kepada penunjuk apabila diluluskan sebagai hujah. Oleh itu, jenis penjaga_masa sebenarnya int(Pemasa(*)()).

Kekaburan ini boleh dielakkan dengan menyatakan secara eksplisit jenis pembolehubah yang dimulakan atau mengisytiharkan tandatangan fungsi secara eksplisit. Contohnya:

<code class="cpp">// Explicitly specify the type of the variable
auto dv: Timer = Timer();

// Explicitly declare the function's signature
int time_keeper(Timer (*)());</code>

Atas ialah kandungan terperinci Bilakah Permulaan Seragam C Menjadi \'Penghuraian Paling Menjengkelkan\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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