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

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

DDD
Lepaskan: 2024-11-01 21:37:29
asal
1116 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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