Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi Ahli Sebaris Ditakrifkan dalam Fail .cpp dan Masih Sebaris?

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

Patricia Arquette
Patricia Arquetteasal
2024-10-26 19:03:02683semak imbas

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>

B.h

<code class="cpp">#pragma once

class A;

class B {
    inline A getA();
};</code>

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>

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!

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