标签: inline

我如何知道函数是否已内联?

如果我将任何函数标记为内联,是否有一种方法可以知道函数是否内联?

c++ inline

21
推荐指数
3
解决办法
3770
查看次数

内联定义和声明

在最近的同行评审期间,另一位软件工程师建议我声明该inline函数inline在定义中(在类之外)以及声明中(在类的内部).他的论点是" 通过内联标记,你说这个方法的执行速度比非内联方法快得多,并且调用者不必担心对方法的过度调用. "

真的吗?如果我是一个类的用户,我真的关心对该方法的过度调用吗?在定义和声明中将其列为内联是否有任何问题?在C++ FAQ指出:

最佳实践:仅限于类体外的定义.

那么谁在这里?

c++ inline

21
推荐指数
2
解决办法
2万
查看次数

C++的内联是不是完全可选的?

我有一个有内联成员的类,但后来我决定从头中删除实现,所以我将函数的成员体移到cpp文件中.起初我刚刚在头文件中留下了内联签名(草率我),程序无法正确链接.然后我修好了标题,当然一切正常.

但是不是内联完全可选吗?

在代码中:

第一:

//Class.h
class MyClass
{
   void inline foo()
   {}
};
Run Code Online (Sandbox Code Playgroud)

接下来改为(不会链接):

//Class.h
class MyClass
{
   void inline foo();
};

//Class.cpp
void MyClass::foo()
{}
Run Code Online (Sandbox Code Playgroud)

然后(将工作正常):

//Class.h
class MyClass
{
   void foo();
};

//Class.cpp
void MyClass::foo()
{}
Run Code Online (Sandbox Code Playgroud)

我认为内联是可选的,想象我可能会因为我的邋iness警告,但没想到链接错误.在这种情况下编译器应该做的正确/标准的事情是什么,我是否应该根据标准得到我的错误?

c++ inline

20
推荐指数
3
解决办法
2455
查看次数

SQL Server:在vs中选择还是?

哪个更快?

SELECT UserName
FROM dbo.UserTable
WHERE UserID in (1,3,4)
Run Code Online (Sandbox Code Playgroud)
SELECT UserName
FROM dbo.UserTable
WHERE UserID = 1 
      OR UserID = 3
      OR UserID = 4
Run Code Online (Sandbox Code Playgroud)

sql-server performance inline

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

现代C++编译器可以在cpp文件中定义内联函数

我知道该关键字inline具有有用的属性,例如用于在头文件中保留模板特化.另一方面,我经常读到这inline几乎没有用作编译器实际内联函数的提示.此外,关键字不能在cpp文件中使用,因为编译器想要inline在调用时检查用关键字标记的函数.

因此,我对现代编译器的"自动"内联功能(即gcc 4.43)感到有些困惑.当我在cpp中定义一个函数时,编译器是否可以内联它,如果它认为内联对函数有意义,或者我是否剥夺了他的某些优化功能?(这对于大多数功能来说都没问题,但对于经常调用的小功能很重要)

c++ compiler-construction inline

20
推荐指数
4
解决办法
7371
查看次数

头文件中定义的小函数:内联还是静态?

我有一些在.h文件中定义的小函数.这是一个小项目(现在),我想避免将声明和定义分开的痛苦,因为它们一直在变化.为了避免多重定义的符号,我可以拥有它们staticinline.什么应该是首选,为什么?

我知道在头文件中定义函数通常是不好的做法.您不必在答案中提及,这个问题在技术上意味着.

c static inline header-files

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

我应该在头文件中定义静态内联方法吗?

我已经了解了通常最好不要在头文件中定义任何内容,因为冗余副本是针对包含头文件的每个其他文件进行的.但是,在静态内联方法的情况下,似乎我必须在现场定义它(至少Visual Studio 2010不允许我这样做).因此,如果我在头文件中编写接口,我就无法定义类定义的静态内联方法或.cpp文件.

那么,我是否应该费心去使用静态内联方法呢?还有一个相关的问题:我是否应该在头文件中定义任何方法或变量(常量怎么样)?

无论如何,奇怪的是,这不是我的C++书籍中非常详细的内容.

编辑:我读过有关静态内联方法的类似问题,但似乎没有一个直接解决这个问题.

c++ static inline header-files

20
推荐指数
2
解决办法
2万
查看次数

为什么C ++ 17中的全局内联变量和静态内联成员需要防护?

从C ++ 17开始,可以使用inline关键字在标头中初始化全局变量和静态成员。虽然我了解了为什么需要保护函数中的静态变量(因为即使在多线程上下文中初始化也只应发生一次),但我不明白为什么也要保护这些新的内联变量(您可以在此处查看:https:// godbolt.org/z/YF8PeQ)。我认为无论如何,所有全局变量和静态成员的初始化都在程序执行的开始(甚至在之前main())进行,因此此时无需考虑多个线程。你能解释一下吗?

c++ inline c++17

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

F#是否具有通用算术支持?

F#是否与C#有相同的问题,你不能直接使用泛型T类型的算术运算符?

你能写一个通用的Sum函数来返回支持算术加法的任何值的总和吗?

generics math f# inline

19
推荐指数
2
解决办法
2498
查看次数

19
推荐指数
2
解决办法
4万
查看次数