C++ 面试题 目录

C++ 中 constexpr 函数的特点和用法

推荐答案

-- -------------------- ---- -------
--------- --- ------- -- --- -- -
    ------ - - --
-

--- ------ -
    --------- --- ------ - ------ ---  -- -----
    --- ------------- - ------ ---     -- -----
    ------ --
-

本题详细解读

1. constexpr 函数的特点

  • 编译时计算constexpr 函数可以在编译时进行计算,前提是传入的参数是编译时常量。这使得 constexpr 函数可以用于需要在编译时确定值的场景,如数组大小、模板参数等。

  • 返回值类型constexpr 函数的返回值类型必须是字面类型(Literal Type),通常包括基本数据类型(如 intdouble 等)、指针、引用、以及某些用户定义的类型。

  • 函数体限制constexpr 函数的函数体必须非常简单,通常只能包含一条 return 语句,或者是一些简单的表达式。C++14 之后,constexpr 函数的限制有所放宽,允许包含局部变量、循环和条件语句等。

2. constexpr 函数的用法

  • 编译时计算constexpr 函数可以用于在编译时计算常量表达式。例如,constexpr int result = add(3, 4); 会在编译时计算出 result 的值为 7

  • 运行时计算constexpr 函数也可以在运行时调用,此时它的行为与普通函数无异。例如,int runtimeResult = add(5, 6); 会在运行时计算出 runtimeResult 的值为 11

  • 模板元编程constexpr 函数可以用于模板元编程,帮助在编译时生成复杂的类型或值。

3. 示例代码解析

-- -------------------- ---- -------
--------- --- ------- -- --- -- -
    ------ - - --
-

--- ------ -
    --------- --- ------ - ------ ---  -- -----
    --- ------------- - ------ ---     -- -----
    ------ --
-
  • constexpr int result = add(3, 4);:由于 34 是编译时常量,add(3, 4) 会在编译时计算出结果 7,并将其赋值给 result

  • int runtimeResult = add(5, 6);:虽然 addconstexpr 函数,但由于 56 不是编译时常量,add(5, 6) 会在运行时计算出结果 11,并将其赋值给 runtimeResult

纠错
反馈