- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
考虑以下内联函数:
// Inline specifier version
#include<iostream>
#include<cstdlib>
inline int f(const int x);
inline int f(const int x)
{
return 2*x;
}
int main(int argc, char* argv[])
{
return f(std::atoi(argv[1]));
}
和 constexpr 等效版本:
// Constexpr specifier version
#include<iostream>
#include<cstdlib>
constexpr int f(const int x);
constexpr int f(const int x)
{
return 2*x;
}
int main(int argc, char* argv[])
{
return f(std::atoi(argv[1]));
}
我的问题是:constexpr
说明符是否暗示 inline
说明符,因为如果将非常量参数传递给 constexpr
函数,编译器将尝试 inline
函数,就好像 inline
说明符被放入其声明中一样?
C++11 标准是否保证?
最佳答案
是([dcl.constexpr],C++11 标准中的 §7.1.5/2):“constexpr 函数和 constexpr 构造函数是隐式内联的 (7.1.2)。”
但是请注意,inline
说明符对于编译器是否可能内联扩展函数的影响确实非常很小(如果有的话)。然而,它确实会影响一个定义规则,从这个角度来看,编译器需要遵循与 constexpr
函数和 inline
函数相同的规则。
我还应该补充一点,无论 constexpr
是否暗示 inline
,C++11 中 constexpr
函数的规则都要求它们简单足以使它们通常是内联扩展的良好候选者(主要的异常(exception)是那些递归的)。然而,从那以后,规则变得越来越宽松,因此 constexpr
可以应用于更大、更复杂的函数。
关于c++ - constexpr 是否暗示内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14391272/
我需要在我的网站中实现自动建议功能,并且我需要一些易于开发或编辑的 java 脚本框架或代码,并且自动建议将是多个字段 最佳答案 适配 jQuery:http://jqueryui.com/ 关于ja
在下面的示例中,SonarQube 提示 model.toString() 是 not null 并且 (model == null) 始终 false,需要一些帮助来了解可以采取哪些措施来修复它。因
我正在尝试创建自定义 iOS 键盘。我使用 UILexicon 类来提供 requestSupplementaryLexiconWithCompletion: 方法提供的基本词库。 但我也想将预测文本
如何断言如果 X 为 true 那么 Y 也为 true。问题是,如果我写以下内容: assert(X && Y && "If X is true then Y should be true too.
创建路径中包含两个反斜杠的文件时,是否会产生任何不可预见的后果。 在此代码中,文件创建正常,但我想知道在使用此文件的过程中是否有任何副作用。 HANDLE hFile = CreateFile(
在下面的示例中,SonarQube 提示 bookmark 可能为 null 或为 null,需要一些帮助来了解可以采取哪些措施来修复它。因为 bookmark 在 for 循环中被初始化为变量,并且
这个问题在这里已经有了答案: Partial ordered Comparator (6 个答案) 关闭 8 年前。 我有一组序列化到文件中的项目。有些项目可以依赖其他项目,但不允许循环引用。因此,
我想创建将始终使用 gcc/g++/clang 支持的 C/C++ 标准的“最新”版本的 shell 别名/clang++(C的一个别名,C++的一个别名)。我意识到这可能有多种解释: 最新的 GNU
我是一名优秀的程序员,十分优秀!