## Adakah Mengikat Rujukan Const kepada Sub-Objek Sementara Memanjangkan Jangka Hayatnya dalam C ?

DDD
Lepaskan: 2024-10-26 04:20:02
asal
409 orang telah melayarinya

## Does Binding a Const Reference to a Sub-Object of a Temporary Extend Its Lifetime in C  ?

Mengenai Mengikat Rujukan Const kepada Sub-Objek Sementara

Dalam kod C seperti ini:

<code class="cpp">#include <stdio.h>

struct P2d {
    double x, y;
    P2d(double x, double y) : x(x), y(y) {}
    ~P2d() { printf("Destructor called\n"); }
};

P2d center() {
    return P2d(10, 10);
}

int main(int argc, const char *argv[]) {
    const double& x = center().x;
    printf("x = %.18g\n", x);
    return 0;
}</code>
Salin selepas log masuk

Penyusun yang berbeza berkelakuan berbeza mengenai jangka hayat pusat objek sementara(). GCC memusnahkan sementara sebelum memasuki printf dalam utama, manakala Clang memanjangkan hayatnya untuk memadankan rujukan x. Walau bagaimanapun, jika digantikan dengan kelas tersuai Double untuk ahli x dan y, kedua-dua penyusun bersetuju dan memanjangkan hayat sementara.

Pertimbangan Standard

Tingkah laku ini ditangani oleh CWG 1651, yang menyatakan bahawa hasil capaian ahli atau ungkapan subskrip yang digunakan pada prvalue ialah xvalue, dan mengikat rujukan kepada subobjek sementara sedemikian tidak seharusnya memanjangkan hayatnya. Walaupun kedua-dua penyusun menganggap center().x sebagai prvalue, mereka tidak melaksanakan sepenuhnya perubahan yang dicadangkan oleh CWG 1651.

Perbezaan Penyusun

GCC

  • Tidak memanjangkan hayat untuk subobjek skalar kerana ia tidak dianggap sementara di bawah [dcl.init.ref]/(5.2.1.1).

Clang

  • Mengiktiraf akses ahli dan sudah melaksanakan peraturan lanjutan seumur hidup, malah mengendalikan hantaran.

Perubahan Standard Masa Depan

N3918, resolusi belum selesai kepada DR 1651, akan menjelaskan bahawa mengakses sementara melalui ungkapan ahli harus memanjangkan hayatnya. Setelah diterima pakai, perubahan ini akan menyelaraskan gelagat Clang dengan standard.

Atas ialah kandungan terperinci ## Adakah Mengikat Rujukan Const kepada Sub-Objek Sementara Memanjangkan Jangka Hayatnya dalam C ?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!