gpt4 book ai didi

c++ - 内联方法 : inside vs outside class definition

转载 作者:IT老高 更新时间:2023-10-28 21:57:15 26 4
gpt4 key购买 nike

如果你有一个方法并且你想给编译器一个提示,内联它是个好主意,你目前有两种解决方案。第一个是在声明类时定义方法:

class Vector {
private:
double* data_;
double* size_;
double* capacity_;
public:
double& operator[](int k) {
return data_[k];
}
...
}

由于这种方法可能会降低可读性,另一种解决方案是使用 inline 关键字并在类外定义方法:

class Vector {
private:
double* data_;
double* size_;
double* capacity_;
public:
inline double& operator[](int k);
...
}

double& Vector::operator[](int k) {
return data_[k];
}

这使代码更具可读性(至少我更喜欢它)。阅读我的STL实现时,我发现他们混合使用了两者。一些方法(我认为真正应该内联的方法)是在类中定义的,而另一些方法是在类外使用 inline 关键字定义的。该文件还以该类的注释声明开头。

所以我的问题如下。当前的编译器(我在考虑 GCCClang 、Intel 和 Visual Studio )是否更有可能内联在类内声明的成员函数,而不是在类外使用 inline 关键字声明的成员函数?

备注:此题与When should I write the keyword 'inline' for a function/method? 不重复。因为我的问题是关于编译器实现。用这两种方式表示你希望这些函数被内联是等价的。 STL 的编写方式表明它们不是。

最佳答案

inline 关键字被认为是对编译器的提示,但是大多数编译器在决定内联什么方面比程序员要好得多,因此他们通常会忽略这个提示

现在inline 关键字的主要(唯一?)使用它允许在标题中定义函数并且不会产生多个定义链接错误(这与内联实际上无关)。

另外请注意,内联发生在函数调用站点,因此说函数是内联是没有意义的,因为它可能在某些地方被内联,并且不在其他人中(取决于它周围的代码)。

我的建议:使用您认为更具可读性的内容,因为它不会影响实际的内联(除非您使用特定于编译器的内容,例如 __forceinline(不要这样做))。

关于c++ - 内联方法 : inside vs outside class definition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28939623/

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