- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我维护着一个庞大的模板类库,这些模板类根据float
或double
类型执行代数计算。许多类都有访问器方法(getter和setter)以及其他运行少量代码的函数,因此,当编译器找到其定义时,此类函数必须被限定为内联函数。相反,其他成员函数包含复杂的代码,因此最好调用而不是内联。
函数定义的很大一部分位于 header 中,实际上位于 header 包含的.inl文件中。但是,也有许多类的函数定义通过float
和double
的显式实例化而幸福地存在于.cpp文件中,这对于库来说是一件好事(here解释了为什么)。最后,有许多类的功能定义在.inl文件(访问器方法)和.cpp文件(构造函数,析构函数和繁重的计算)中被打乱,这使得它们都很难维护。
只有在我知道防止内联某些函数的可靠方法的情况下,我才会在.inl文件中使用所有类的实现;如果inline
关键字可以强烈建议编译器内联某些函数,则将在.cpp文件中使用所有的类实现。它不是。我真的希望库中的所有函数定义都驻留在.cpp文件中,但是由于访问器方法在整个库中得到了广泛使用,因此我必须确保在引用而不是调用它们时都将它们内联。
因此,在这方面,我的问题是:
inline
进行了标记,编译器都会自动将其定义为内联,是否可以使用inline
标记模板函数的定义是否有意义?或不? inline
关键字只是对编译器内联函数的建议。
inline
关键字标记这些函数,以为编译器提供良好的提示(或使用用于内联强制的关键字),并将其余功能移入各自的.cpp文件。
inline
来加倍鼓励函数的内联状态(尚不知道在这种情况下关键字是应该放在两个位置还是仅放在一个位置)。
最佳答案
1. Does it make any sense to mark the definition of a template function with inline in view of the fact that, as I've recently learnt, it is going to be automatically qualified as inline by the compiler regardless of whether it's marked with inline or not? Is the behavior compiler-specific?
9.3 Member functions
...
A member function may be defined (8.4) in its class definition, in which case it is an inline member function (7.1.2)
template <typename FloatT> my_class<FloatT>::my_function()
始终是内联函数:
template <typename FloatT>
class my_class
{
public:
void my_function() // `inline` member function
{
//...
}
};
template <>
class my_class<double> // specialization for doubles
{
public:
void my_function() // `inline` member function
{
//...
}
};
但是,通过将
my_function()
的定义移到
template <typename FloatT> my_class<FloatT>
的定义之外,它不会自动成为内联函数:
template <typename FloatT>
class my_class
{
public:
void my_function();
};
template <typename FloatT>
void my_class<FloatT>::my_function() // non-`inline` member function
{
//...
}
template <>
void my_class<double>::my_function() // non-`inline` member function
{
//...
}
在后一个示例中,将
inline
说明符与定义一起使用确实是有道理的(例如,这不是多余的):
template <typename FloatT>
inline void my_class<FloatT>::my_function() // `inline` member function
{
//...
}
template <>
inline void my_class<double>::my_function() // `inline` member function
{
//...
}
2. And most importantly, since I would like to have the definitions of all the member functions of a template class gathered together in a single file, either it's .inl or .cpp (using explicit instantiation in case of .cpp), preferably still being able to hint the compiler (MSVC and GCC) which of the functions should be inlined and which shouldn't, sure if such thing is possible with template functions, how can I achieve this or, if there is really no way (I hope there is), what would be the most optimal compromise?
inline
说明符;
inline
说明符只是一个提示。
__forceinline
关键字来强制内联,而
#pragma auto_inline(off)
则阻止内联。 G++支持分别强制和防止内联的
always_inline
和
noinline
属性。您应引用编译器的文档以获取详细信息,包括在编译器无法按要求内联函数时如何启用诊断。
#include
集合多很多的
#include
,定义类/模板。例如,有时成员函数定义将需要
#include <algorithm>
,但是类定义不太可能需要包含
<algorithm>
才能进行定义。您的编译器可以跳过不使用的函数定义,但是更多的
#include
可以显着延长编译时间,并且您不太可能希望内联这些非“简单”的函数。
3. If compilers are so smart these days that they can make better choices about which function should be inlined and which should be called and are capable of link-time code generation and link-time optimization, which effectively allows them looking into a .cpp-located function definition at link time to decide its fate about being inlined or called, then maybe a good solution would be simply moving all the definitions into respective .cpp files?
关于c++ - 跨文件的代码组织,这些文件必须处理模板功能和内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420802/
我之前已经发布了一些这样的代码,试图在正确的位置获得侧边栏链接并以一种特殊的方式看起来,我决定朝着不同的方向前进。我现在需要的是知道我应该做什么来获得我在侧边栏旁边而不是下方标记为“内容”的 div。
我试图让多个 inline 和 inline-block 组件在 div 中垂直对齐。这个例子中的span怎么就非要往下推呢?我已经尝试了 vertical-align:middle; 和 verti
我试图让多个 inline 和 inline-block 组件在 div 中垂直对齐。这个例子中的span怎么就非要往下推呢?我已经尝试了 vertical-align:middle; 和 verti
我试图让多个 inline 和 inline-block 组件在 div 中垂直对齐。这个例子中的span怎么就非要往下推呢?我已经尝试了 vertical-align:middle; 和 verti
我很困惑...所以我在容器中有一个 UL,当我更改 UL 上方的 DIV 时,它似乎会影响 UL 之后的流程...发生了什么事? DIV 是 block 元素,对吗?和 UL 一样,对吧? 所以在这个
我问这个基本问题是为了澄清事实。都提到了这个问题及其目前接受的答案,这是不令人信服的。然而,投票第二多的答案提供了更好的洞察力,但也不是完美的。。在阅读下面的内容时,请尝试区分内联关键字和“内联”概念
function roll_over(img_name, img_src) { document[img_name].src = img_src; } 我使用此代码来显示 T 恤并在鼠标悬停时显
是否可以在 AngularJS 表达式的内联 if 语句中包含多个语句?例如,以下失败: ng-change="someCondition() ? doA(); doB() : doC()" ng-c
我在 RStudio 中使用 R Markdown 创建一个混合 Markdown 和 R 输出的报告。我知道如何在 Markdown 中使用内联 R 表达式,但我想知道如何进行相反的操作,即在 R
我们无法将表单标签添加到内联 CKEditor来自 chrome 和 IE,但它在 Firefox 中运行良好。如果我们将表单添加到内联 CKEditor,它会删除表单标签。 例如:如果我在 Fire
在我的 HTML 代码中,我有两个输入: Yes No 现在我有一个默认情况下的 div,因为它的样式显示内联,我希望当我单击“否”时,它会使其样式不显示,而"is"则会使其内联,所以我制作了此功
如何在 PowerShell 中创建带有内联 If 的语句(IIf,另请参阅: Immediate if 或 ternary If )? 如果您也认为这应该是 native PowerShell 函数
嗨。我在阅读以下问题后提出这个问题:Question_1和 Question_2 。 Question_1 没有任何合适的答案,Question_2 有替代解决方案,但不是完美的解决方案。 这里我有两
有人可以帮我解决以下语法或告诉我是否可行吗?因为我要修改 if ... else ... 条件。我不想在列表中添加重复的值,但我收到了 KeyError。 其实我不太熟悉这种说法: twins[val
有时我喜欢滥用 python 语法,特别是短的 if block : if True : print 'Hello' else : print 'Bye' 现在我尝试对函数定义做同样的事情: i
我在尝试将 Logo 容器底部对齐到零高度父级时遇到了问题。最好,我想用纯 CSS 来实现这一点。 在附带的 fiddle 中,我想让 control-group 的底部与零高度 panel 元素的顶
我需要内联编写 HTML 和 Javascript 代码,即在 HTML 正文中(需要显示一些随机整数值)我搜索了很多博客,但到目前为止没有找到任何帮助。请指教。 我想实现这个功能: Offer
好吧,这更多的是要求澄清 C++ 的一个特性是如何工作的,而不是一个是否可以的答案。我将从解释我遇到的问题开始,因为直接的答案是它不是一个很好的类设计。 我有一个类正在形成一个无法维护的 if 语句
我正在我的 C# 代码中获取一个数据库行。行包含 3 个不同的标志(3 列具有 true 或 false 值)。这些列中只有一列为真,这将决定该对象的类型。我如何在一行代码中确定该对象的类型。如果所有
在 CSS 中,我如何才能只将电话号码加粗,以便它与声明的其余部分内联,但电话号码是加粗的? 而不是在 HTML 中这样做: › Start posting jobs today– 0
我是一名优秀的程序员,十分优秀!