Bolehkah Fungsi Ahli Sebaris Ditakrifkan dalam Fail .cpp dan Masih Sebaris?

Patricia Arquette
Lepaskan: 2024-10-26 19:03:02
asal
615 orang telah melayarinya

Can Inline Member Functions Be Defined in a .cpp File and Still Be Inlined?

Fungsi Ahli Sebaris C dalam Fail .cpp: Dilema dan Penyelesaian

Dalam C , fungsi ahli sebaris biasanya diisytiharkan dalam fail pengepala untuk sebab kecekapan. Walau bagaimanapun, senario tertentu mungkin memerlukan pelaksanaan fungsi dalam fail .cpp. Mari kita mendalami situasi sedemikian:

Pertimbangkan senario berikut dengan kebergantungan bulat:

A.h

<code class="cpp">#pragma once
#include "B.h"

class A {
    B b;
};</code>
Salin selepas log masuk

B.h

<code class="cpp">#pragma once

class A;

class B {
    inline A getA();
};</code>
Salin selepas log masuk

Untuk memecahkan pergantungan pekeliling, pelaksanaan getA perlu diletakkan dalam B.cpp:

B.cpp

<code class="cpp">#include "B.h"
#include "A.h"

inline A B::getA() {
    return A();
}</code>
Salin selepas log masuk

Dilema

Adakah peletakan kata kunci sebaris dalam kedua-dua pengepala dan fail .cpp menjejaskan sebarisan fungsi?

Resolusi

Malangnya, walaupun kata kunci sebaris dalam fail .cpp, pengkompil tidak akan sebaris getA melainkan ia digunakan dalam B.cpp itu sendiri. Ini kerana pengkompil memerlukan definisi fungsi sebaris apabila ia ditemui. Biasanya, meletakkan fungsi dalam fail pengepala memastikan ketersediaan ini.

Amalan Terbaik

Mengikut Soalan Lazim C, adalah penting untuk menentukan fungsi sebaris dalam fail pengepala. Meletakkannya dalam fail .cpp boleh membawa kepada ralat luaran yang tidak dapat diselesaikan.

Penyelesaian Alternatif

Senario yang disediakan tidak mencadangkan penyelesaian alternatif untuk meletakkan fungsi sebaris dalam . fail cpp.

Atas ialah kandungan terperinci Bolehkah Fungsi Ahli Sebaris Ditakrifkan dalam Fail .cpp dan Masih Sebaris?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!