相关疑难解决方法(0)

要求函数在c ++中内联

对函数有什么要求,以便可以在c ++中内联执行?是否存在函数不能内联的情况?或者任何函数可以是内联的,程序员有责任根据运行时和编译时考虑来决定如何定义函数?

c++ inline

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

如何使用内联函数说明符“隐藏”私有成员函数?

有一个包含private成员函数的类,我想标记为inline(以明确标记我暗示特定函数可能被内联的意图),但不要将它们的实现公开给 API 使用者。为简单起见,它可能如下所示:

Airplane.h

class Airplane
{
    char manufacturer[80];
    char mode[80];
    // ... 
public:
    void autopilot_steer_left(int degree);
    // ...
private:
    // ...
    inline bool validate_hydraulic_on_left_wing();  // secret, patent-based, etc.
};
Run Code Online (Sandbox Code Playgroud)

Airplane.cpp

#include "Airplane.h"
// ...

void Airplane::autopilot_steer_left(int degree)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我应该把定义放在哪里Airplane::validate_hydraulic_on_left_wing?我知道常见的地方是Airplane.h(可能在课堂内,所以它是inline隐含的),但这与我的意图相矛盾。

c++

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

内联在C++和编译器中

!特定于常用的方法,如getter和setter.!

我不知道何时inline应该使用关键字.我知道它的作用,但我仍然不知道.

根据Bjarne Stroustrup的采访,他说:

我自己的经验法则是使用内联(显式或隐式)仅用于我知道经常使用的简单的单行或双行函数,并且多年来不太可能发生太大变化.就像vector的size()函数一样.内联的最佳用途是函数,其中body的代码少于函数调用和返回机制,因此内联函数不仅比非内联版本更快,而且在对象内核中更紧凑:更小更快.

但是我经常读到编译器会自动内联短函数,比如getter,setter方法(在这种情况下得到的size()是a vector).

有人可以帮忙吗?

编辑:

多年来回到这一点并且更多地体验高性能C++ +编程,内联确实可以提供帮助.在游戏行业工作甚至强制在线有时会有所作为,因为并非所有编译器都能正常工作.有些可能会自动内联,有些则不会.我的建议是,如果您使用框架,库或任何使用频繁的代码考虑使用内联,但这只是一般建议,因为您希望这些代码完全针对任何编译器进行优化.始终使用内联可能不是最好的,因为您还需要这部分代码的类定义.如果您不能再使用前向声明,有时这会增加编译时间.

另一个提示:即使分离了函数定义,你也可以使用C++ 14自动返回类型推导:

MyClass.h

class MyClass
{
    int myint;
public:
    auto GetInt() const;
}  

inline auto MyClass::GetInt() const { return myint; }
Run Code Online (Sandbox Code Playgroud)

所有在.h文件中.

c++ compiler-construction inline

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

调用 __device__ 函数会影响 CUDA 中使用的寄存器数量吗?

我在很多地方读到过,__device__函数几乎总是由 CUDA 编译器内联。__device__那么,当我将代码从内核移动到内核调用的函数时,(通常)使用的寄存器数量不会增加,这样说是否正确?

例如,以下代码片段使用相同数量的寄存器吗?他们的效率相同吗?

片段 1

__global__ void manuallyInlined(float *A,float *B,float *C,float *D,float *E) {
    // code that manipulates A,B,C,D and E 
}
Run Code Online (Sandbox Code Playgroud)

片段2

__device__ void fn(float *A,float *B,float *C,float *D,float *E) {
    // code that manipulates A,B,C,D and E 
}


__global__ void manuallyInlined(float *A,float *B,float *C,float *D,float *E) {
    fn(A,B,C,D,E);
}
Run Code Online (Sandbox Code Playgroud)

performance cuda inline

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

如果我将一个大函数声明为内联函数怎么办?

我搜索了一些相关的问题(例如C++中的内联函数的好处?),但我仍有疑问.

如果内联函数只是"为编译器提供一个简单的机制来应用更多的OPTIMIZATIONS".

  1. 那么我可以将每个函数设置为内联函数吗?
  2. 如果我错误地将函数设置为内联函数,那么性能会发生什么?
  3. 任何告诉我函数大小不应该是内联函数的阈值?

c++ performance inline

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

内联const函数

由于内联函数将替换代码中的实际调用,因此将内联函数作为const调用有什么用。

Inline void adddata() const {...}
Run Code Online (Sandbox Code Playgroud)

c++ inline-functions

-2
推荐指数
1
解决办法
4632
查看次数