gpt4 book ai didi

.cpp 文件中的 C++ 内联成员函数

转载 作者:IT老高 更新时间:2023-10-28 12:10:59 25 4
gpt4 key购买 nike

我知道根据定义,内联成员函数应该放在标题中。但是,如果不可能将函数的实现放入头文件中怎么办?让我们来看看这种情况:

文件 A.h

#pragma once
#include "B.h"

class A{
B b;
};

文件 B.h

#pragma once

class A; //forward declaration

class B{
inline A getA();
};

由于循环包含,我必须将 getA 的实现放入

B.cpp

#include "B.h"
#include "A.h"

inline A B::getA(){
return A();
}

编译器会内联getA吗?如果是这样,哪个内联关键字是重要的关键字(标题中的关键字或 .cpp 文件中的关键字)?是否有另一种方法可以将内联成员函数的定义放入其 .cpp 文件中?

最佳答案

引自 C++ FAQ :

Note: It's imperative that the function's definition (the part between the {...}) be placed in a header file, unless the function is used only in a single .cpp file. In particular, if you put the inline function's definition into a .cpp file and you call it from some other .cpp file, you'll get an "unresolved external" error from the linker.

当编译器发现内联函数有任何用途时,它需要查看内联函数的定义。如果将内联函数放在头文件中,这通常是可能的。

Will the compiler inline getA?

不,除非 getA() 的使用在 B.cpp 本身中。

If so, which inline keyword is the significant one (the one in the header or the one in the cpp)?

Best practice : 只在类体之外的定义中。

Is there another way to put the definition of an inline member function into it's cpp file?

不,至少我不知道。

关于.cpp 文件中的 C++ 内联成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3992980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com