相关疑难解决方法(0)

为什么标题中的C++内联函数?

注意:这不是关于如何使用内联函数或它们如何工作的问题,更多的是为什么它们按照它们的方式完成.

类成员函数的声明不需要定义函数inline,它只是函数的实际实现.例如,在头文件中:

struct foo{
    void bar(); // no need to define this as inline
}
Run Code Online (Sandbox Code Playgroud)

那么,为什么一类功能的内嵌实施是在头文件?为什么我不能把内联函数放在.cpp文件中?如果我在哪里尝试将内联定义放在.cpp文件中,我会得到一个错误:

error LNK2019: unresolved external symbol 
"public: void __thiscall foo::bar(void)"
(?bar@foo@@QAEXXZ) referenced in function _main 
1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe 
: fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

c++ theory language-design inline c++-faq

109
推荐指数
7
解决办法
9万
查看次数

是不是内联过早优化?

可能重复:
C++中的内联函数

现代编译器在决定应该内联什么和不应该什么时,比程序员更好.就像register,不应该内联函数只是编译器的工作,并被认为是过早的优化?

c++ compiler-construction optimization inline

4
推荐指数
1
解决办法
335
查看次数

模板类的方法是否暗示内联链接?

模板类的方法是否隐含了inline链接(不是在谈论内联优化),还是只是模板化的方法?

// A.h

template<typename T>
class A
{
public:
    void func1();                       //  #1
    virtual void func2();               //  #2
    template<typename T2> void func3(); //  #3
};

template<typename T>
void A<T>::func1(){}    //  #1

template<typename T>
void A<T>::func2(){}    //  #2

template<typename T>
template<typename T2>
void A<T>::func3<T2>(){}    //  #3
Run Code Online (Sandbox Code Playgroud)

以上所有案例都是inline[联系]吗?(我应该明确写inline任何一个)?

c++ templates inline linkage

4
推荐指数
1
解决办法
1157
查看次数

内联公共接口的方法

通常我更喜欢完全拆分声明和定义,因此,我倾向于定义内联方法,.cpp
我只是希望链接优化器在不同的编译单元中使用它时将其内联。

我的问题是:

  1. 如果我知道我的链接器在链接时支持内联,真的不鼓励在 cpp 中内联吗?
  2. 如果我想从另一个库调用该函数应该怎么做?(它会起作用吗?)

c++ linker compilation inline

1
推荐指数
1
解决办法
678
查看次数