Rumah > pembangunan bahagian belakang > C++ > Bilakah `auto` dalam C 11 menyimpulkan nilai atau rujukan?

Bilakah `auto` dalam C 11 menyimpulkan nilai atau rujukan?

Linda Hamilton
Lepaskan: 2024-11-03 15:35:02
asal
990 orang telah melayarinya

When does `auto` in C  11 deduce a value or a reference?

Kehalusan Semantik "auto" C 11

Dalam C 11, kata kunci auto menawarkan cara yang mudah untuk menyimpulkan secara automatik jenis pembolehubah berdasarkan pemulanya . Walau bagaimanapun, terdapat нюансы tertentu untuk dipertimbangkan sama ada auto akan menyelesaikan kepada nilai atau rujukan.

Memahami Peraturan

Peraturannya adalah mudah: ia bergantung pada cara pembolehubah diisytiharkan.

<code class="cpp">int i = 5;
auto a1 = i;    // value
auto &a2 = i;  // reference</code>
Salin selepas log masuk

Dalam kes pertama, a1 ialah nilai kerana ia tidak diisytiharkan sebagai rujukan. Dalam kes kedua, a2 ialah rujukan kerana ia telah diisytiharkan secara eksplisit sebagai satu.

Menjelaskan Ketidakpastian

Mari gunakan peraturan ini pada contoh yang anda berikan:

  • auto p = get_foo();: get_foo() mengembalikan rujukan kepada penunjuk pintar. Memandangkan p diisytiharkan tanpa rujukan, ia akan menjadi salinan, menghasilkan objek jenis rujukan.
  • auto sp = s_foo;: s_foo ialah rujukan statik kepada penunjuk pintar. Apabila memberikannya kepada sp, rujukan akan disalin, menghasilkan objek jenis rujukan.
  • untuk (auto foo: c): foo akan menjadi salinan setiap lelaran dalam vektor kerana ia tidak diisytiharkan sebagai rujukan.

Bukti dengan Pengaturcaraan Meta Templat

Kod berikut menunjukkan tingkah laku ini menggunakan pengaturcaraan meta templat:

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

template< typename T >
struct A
{
    static void foo(){ std::cout << "value" << std::endl; }
};
template< typename T >
struct A< T&amp;>
{
    static void foo(){ std::cout << "reference" << std::endl; }
};

float& bar()
{
    static float t=5.5;
    return t;
}

int main()
{
    int i = 5;
    int &r = i;

    auto a1 = i;
    auto a2 = r;
    auto a3 = bar();

    A<decltype(i)>::foo();       // value
    A<decltype(r)>::foo();       // reference
    A<decltype(a1)>::foo();      // value
    A<decltype(a2)>::foo();      // value
    A<decltype(bar())>::foo();   // reference
    A<decltype(a3)>::foo();      // value
}</code>
Salin selepas log masuk

Output:

value
reference
value
value
reference
value
Salin selepas log masuk

Ini mengesahkan bahawa jenis auto ditentukan oleh pengisytiharannya, bukan oleh jenis pemulanya.

Atas ialah kandungan terperinci Bilakah `auto` dalam C 11 menyimpulkan nilai atau rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan