侧边栏壁纸
博主头像
LittleAO的学习小站 博主等级

在知识的沙漠寻找绿洲

  • 累计撰写 125 篇文章
  • 累计创建 27 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

C++知识点之 内联函数和constexpr函数

LittleAO
2024-08-28 / 0 评论 / 0 点赞 / 11 阅读 / 0 字
温馨提示:
本文最后更新于2024-08-28,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

这部分内容来自《Primer C++》第五版中文版213页。

内联函数

在函数返回类型前添加inline关键字,可以将该函数命名为内联函数。内联函数可以将每个调用该函数的调用点直接展开,无需真正的调用这个函数。提升了性能。

例如:

inline const string& shorterString(const string& s1, const string& s2)
{
    return s1.size() > s2.size() ? s1 : s2;
}
int main()
{
    cout << shorterString("hello", "world!") << endl;
    // 上面会被展开成cout << s1.size() > s2.size() ? s1 : s2 << endl; , 避免了函数调用
}

内联函数一般用于优化规模小,流程直接,频繁调用的函数。很多编译器不支持内联递归函数。

inline可以实现函数模板,如下:

template<typename T> inline const T& shorterString(const T& s1, const T& s2)
{
    return s1.size() > s2.size() ? s1 : s2;
}
int main()
{
    auto nums1 = vector<int>(4, 5);
    auto nums2 = vector<int>(3, 6);
    for (auto& i : shorterString(nums1, nums2))
    {
        cout << i << endl;
    }
}

注意模板的参数列表在inline前边。

定义在类内部的函数都是隐式的inline函数。在类外部定义的函数可以用Inline定义,最好放在一个头文件中。

constexpr函数

constexpr函数值能用于常量表达式的函数。函数定义与普通函数定义类似,需要遵守以下规定:

  • 返回类型和形参类型必须是字面值类型。

  • 函数体中只能有一条return语句。

例子:

constexpr int scale(int i)
{
    return i * 2;
}
int main()
{
    int nums[scale(5)]; // 正确,constexpr函数返回了常量表达式
    int i = 3;
    int nums2[scale(i)]; // 错误,返回的不是常量表达式
}

0

评论区