相关疑难解决方法(0)

我应该何时为函数/方法编写关键字'inline'?

我应该何时inline在C++中为函数/方法编写关键字?

看到一些答案,一些相关的问题:

  • 我应该何时写在C++函数/方法关键字"内联"?

  • 什么时候编译器不知道何时使函数/方法'内联'?

  • 当一个应用程序为函数/方法写入"内联"时,是否多线程是否重要?

c++ inline one-definition-rule

526
推荐指数
6
解决办法
12万
查看次数

C++中内联函数的好处?

在C++中使用内联函数的优点/缺点是什么?我看到它只会提高编译器输出的代码的性能,但是使用今天的优化编译器,快速CPU,大容量存储器等(不像1980年那样<内存稀缺,一切都必须适合100KB内存)什么他们今天真的有优势吗?

c++ inline-functions

253
推荐指数
6
解决办法
17万
查看次数

为什么允许指向内联函数的指针?

我有两个问题:

1)为什么在C++中允许指向内联函数的指针?我已经读过内联函数的代码只是被复制到函数调用语句中,内联函数中没有编译时内存分配.那么为什么内联函数存在一个指针,因为内联函数没有固定的内存地址?

2)考虑以下代码:

inline void func()    
{
    int n=0;
    cout<<(&n);
} 
Run Code Online (Sandbox Code Playgroud)

它是否应该打印不同值的n每次func()调用地址?[因为我认为每次复制内联函数代码时,必须重新分配局部变量(而在正常函数的情况下,重新初始化会发生)]

我是初学者,为了加强我的概念,我问了这个问题.如果我在任何地方都错了,请纠正我.

c++ inline function

52
推荐指数
4
解决办法
6769
查看次数

编译器是否可以自行确定变量是否为const?

我知道这个函数很简单,它将被内联:

int foo(int a, int b){
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

但我的问题是,编译器无法自动检测到这与以下内容相同:

int foo(const int a, const int b){
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

既然可以检测到这一点,为什么我需要在const任何地方输入?我知道inline由于编译器的进步,关键字已经过时了.是不是该const做同样的时间?

c++ const qualifiers

12
推荐指数
4
解决办法
1107
查看次数

强制在其他翻译单元中使用内联函数

这部分gcc手册非常模糊,我无法理解重复尝试后forceinline属性的用法.

我正在定义一个对象和某些函数来操纵该对象.这些函数中很少有可以使用原子指令,我希望编译器内联这些函数.但是,我不想在头文件中编写这些函数,并在Linux内核中使用"静态内联"声明它们.

有没有办法强制gcc从另一个翻译单元内联函数?

c gcc inline

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

内联函数是否对性能有任何影响?

使用现代编译器,声明内联函数对性能有任何影响吗?

也就是说,面对在标题或源文件中定义内联函数的选项,两者之间是否有任何区别?

在这个SO问题中,何时使用内联函数而何时不使用它?,接受的答案有几个原因.

摘录:

做:

  • 非常小的函数是很好的候选者inline:更快的代码和更小的可执行文件(更多的机会留在代码缓存中)
  • 功能很小,经常调用

别:

  • 大型函数:导致更大的可执行文件,无论调用开销导致的执行速度更快,都会严重影响性能

这个建议来自7年前,我读过这些天内联词被忽略了,编译器决定要内联什么.

问题:

  • 以上建议是否仍然相关?
  • 定义函数内联在多大程度上有任何影响(除了防止多个定义链接器问题)?
  • 这几天我有什么理由来内联函数?

c++ inline

8
推荐指数
0
解决办法
109
查看次数

为什么有内联函数声明而不是内联函数调用?

C++(和其他各种语言)支持内联函数.如果我想要一个函数内联,我必须inline在声明中使用关键字.对我而言,这种接缝非常不直观:为什么我不能inline在调用函数时使用它?例:

void foo(){...}
inline foo();
Run Code Online (Sandbox Code Playgroud)

代替

inline void foo(...){...}
foo();
Run Code Online (Sandbox Code Playgroud)

这将允许我仅在特定位置内联函数而无需复制函数.此外,每个功能都可以内联,这将使机制更加灵活.为什么这不支持是有原因的吗?

c++

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

extern 内联函数被引用但未定义

void foo(void) {}我有一个我希望内联的函数(让我们称之为它)。但是我在 .cpp 文件中定义了它。
我无法将该函数移动到标头,因为它正在使用 .cpp 中的其他函数。



编辑:
下面的代码就像真实的代码一样不使用 C++ 功能。我可以明确补充:

#ifdef __cplusplus
extern "C"
#endif
Run Code Online (Sandbox Code Playgroud)

如果我想将下面的代码转换为 c99,我只需要更改我的项目属性(或 makefile,如果您愿意)而不是代码。我也在询问c++,因为它可以解决我的问题,而c99不能。
因此我的问题中的 C 和 C++ 标签是合理的。代码是可移植的,
请参阅:When to use extern "C" in C++?



编辑#2
好吧,我明白我必须将foo()定义放在头文件中。如何在不将它们移动到头文件的情况下调用func_a()func_b()from ?foo()有什么解决方法吗?



示例
文件.c/.cpp:

int    func_a (int a,    int b,    int c)    {/*...*/};
double func_b (double a, double b, double c) {/*...*/};

void   foo    (int a, double b) { // unction definition
    //...
    int myInt …
Run Code Online (Sandbox Code Playgroud)

c c++ inline extern

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