C++ 样式:函数声明上的内联

C++ 样式:函数声明上的内联,c++,coding-style,inline,C++,Coding Style,Inline,可能重复: 我不是百分之百确定,但据我所知,如果我在hpp文件上声明一个函数,它的主体将被视为标记为内联(编译器将决定要做什么),我的意思是: 与以下内容相同: //myfile.hpp class StackOverflow{ public: ***inline*** void overflow(){_overflow = true;} ... } 如果我错了,那么问题就结束了,但除此之外,我真的很喜欢将函数标记为内联函数,即使它不是必需的,通用代码风格指南是否对此进行了说明 非常

可能重复:

我不是百分之百确定,但据我所知,如果我在hpp文件上声明一个函数,它的主体将被视为标记为内联(编译器将决定要做什么),我的意思是:

与以下内容相同:

//myfile.hpp
class StackOverflow{
public:
    ***inline*** void overflow(){_overflow = true;}
...
}
如果我错了,那么问题就结束了,但除此之外,我真的很喜欢将函数标记为内联函数,即使它不是必需的,通用代码风格指南是否对此进行了说明


非常感谢

在类定义中定义函数体使函数隐式地与使用关键字
inline
标记函数相同

就编码风格而言, 仅仅在类中定义函数体不是一个好的实践

class Foo {
public:
  void method();  ← best practice: don't put the inline keyword here
  ...
};

inline void Foo::method()  ← best practice: put the inline keyword here
{ ... }
解释理由:

class Fred {
public:
  void f(int i, char c)
    {
      ...
    }
};
虽然这对编写类的人来说比较容易,但对所有读者来说都比较难,因为它混合了类的“做什么”和“如何做”。由于这种混合,我们通常更喜欢在类主体之外用
inline
关键字定义成员函数。
理解这一点的洞察力:在一个面向重用的世界中,通常会有许多人使用您的类,但只有一个人构建它(您自己);因此,你应该做有利于多数人的事,而不是少数人的事


在类定义中定义函数体使函数隐式地与使用关键字
inline
标记函数体相同

就编码风格而言, 仅仅在类中定义函数体不是一个好的实践

class Foo {
public:
  void method();  ← best practice: don't put the inline keyword here
  ...
};

inline void Foo::method()  ← best practice: put the inline keyword here
{ ... }
解释理由:

class Fred {
public:
  void f(int i, char c)
    {
      ...
    }
};
虽然这对编写类的人来说比较容易,但对所有读者来说都比较难,因为它混合了类的“做什么”和“如何做”。由于这种混合,我们通常更喜欢在类主体之外用
inline
关键字定义成员函数。
理解这一点的洞察力:在一个面向重用的世界中,通常会有许多人使用您的类,但只有一个人构建它(您自己);因此,你应该做有利于多数人的事,而不是少数人的事


由于在本文中提到的关键字
inline
没有提供任何信息,请将其忽略。这只是视觉上的混乱

如果有一个选项使内联定义的函数成为非内联函数,这将是一个不同的问题(以默认情况下的
private
)为例):在这里,可以认为,即使是默认情况,将选择显式也会使理解变得更容易。但这里别无选择。无论您做什么,在类主体中定义的成员函数都是
内联的

事实上,将其显式标记为
inline
类似于提供其他推断信息。你不会写下面的吧

#define member
#define function

class StackOverflow{
public:
    member function inline void overflow() { _overflow = true; }
}

由于在本文中提到的关键字
inline
没有提供任何信息,请将其忽略。这只是视觉上的混乱

如果有一个选项使内联定义的函数成为非内联函数,这将是一个不同的问题(以默认情况下的
private
)为例):在这里,可以认为,即使是默认情况,将选择显式也会使理解变得更容易。但这里别无选择。无论您做什么,在类主体中定义的成员函数都是
内联的

事实上,将其显式标记为
inline
类似于提供其他推断信息。你不会写下面的吧

#define member
#define function

class StackOverflow{
public:
    member function inline void overflow() { _overflow = true; }
}

如果将函数声明为类内部的内联函数,对于类似于
register
关键字的函数,编译器可以确定(这是一个建议)进行优化是否明智。通常,使用在类本身内部内联编程的内联函数是一条经验法则,但是也可以在类的实现中完成,尽管这并不常见,而且它提供的唯一好处是链接,如果您决定将.h/.hpp文件作为API头传递出去的话

如果将函数声明为类内部的内联函数,对于类似于
register
关键字的函数,编译器可以确定(这是一个建议)进行优化是否明智。通常,使用在类本身内部内联编程的内联函数是一条经验法则,但是也可以在类的实现中完成,尽管这并不常见,而且它提供的唯一好处是链接,如果您决定将.h/.hpp文件作为API头传递出去的话

我知道复制品不准确。但作为一个关于编码风格的问题,它并不适合“如果我在带有主体的hpp文件上声明一个函数,它将被视为标记为内联”。请注意,这仅适用于成员函数。我知道重复项并不准确。但作为一个关于编码风格的问题,它并不适合“如果我在带有主体的hpp文件上声明一个函数,它将被视为标记为内联”。请注意,这仅适用于成员函数。这是混淆问题<代码>内联,首先表示链接。这不是由编译器决定的,它是强制性的。不幸的是,语言设计者也用它来暗示乐观主义者内联调用一个如此声明的函数;我本应该更清楚地说明这一区别。我的意思是:如果编译器认为这样做有好处,那么函数将由编译器内联。如上所述:[链接]这是令人困惑的问题<代码>内联,首先表示链接。这不是由编译器决定的,它是强制性的。不幸的是,语言设计者也用它来暗示乐观主义者内联调用一个如此声明的函数;我应该有点