C++ 面试题:C++中 constexpr 函数的限制有哪些?

constexpr 的限制

字面类型要求

参数和返回类型必须是字面类型。字面类型包括:

  • 基本类型(intcharbool等)
  • 引用类型(必须绑定到字面类型)
  • 数组类型(元素必须是字面类型)
  • 字面值类(所有非静态成员为字面类型,且有constexpr构造函数)
  • void(C++14起)
  • 部分标准库类型(如std::arraystd::string_view

非字面类型示例:

  • std::string(动态内存分配)
  • 带有虚函数的类(C++20前)
  • 包含非字面类型成员的类
禁止的操作
  • 动态内存分配(new/delete
  • 异常处理(throwtry-catch
  • 调用非constexpr函数
  • 修改全局/静态变量
成员函数的特殊规则
  • 虚函数:C++20前不允许,C++20起允许
  • 隐式const限定 :C++11中constexpr成员函数隐式为const,C++14取消此限制
递归深度限制

编译器对constexpr递归深度有默认限制(如GCC默认为512层),可通过编译选项调整:

bash 复制代码
g++ -fconstexpr-depth=1000 main.cpp
版本差异
特性 C++11 C++14+ C++20
函数体复杂度 单条语句 允许循环 进一步扩展
虚函数支持 不支持 不支持 支持
成员函数隐式const
示例对比

合法(C++14+):

cpp 复制代码
constexpr int sum(int n) {
    int total = 0;
    for (int i = 0; i < n; ++i) {
        total += i;
    }
    return total;
}

非法:

cpp 复制代码
constexpr int* create() {
    int* p = new int(10); // 动态内存分配
    return p;
}

合法(C++20):

cpp 复制代码
struct Base {
    virtual constexpr int get() { return 1; }
};

编程语言C++www.share.parkxh.com++C语言的魅力

编程语言C++www.share.mshxue.net++C语言的魅力

编程语言C++www.share.hhjtep.com++C语言的魅力

编程语言C++www.share.enneragram.com++C语言的魅力

编程语言C++www.share.ccynyk.com++C语言的魅力

编程语言C++www.share.dongmiandaojia.com++C语言的魅力

编程语言C++www.share.sunzhihuiyd.com++C语言的魅力

编程语言C++www.share.whxhby.net++C语言的魅力

编程语言C++www.share.lunwenpingshen.com++C语言的魅力

编程语言C++www.share.lcfxnyidx.com++C语言的魅力

编程语言C++www.share.zhaimeiti.com++C语言的魅力

编程语言C++www.share.19kc.cn++C语言的魅力

编程语言C++www.share.bangnitesw.com++C语言的魅力

编程语言C++www.share.acbrick.com++C语言的魅力

编程语言C++www.share.xjzcxgy.com++C语言的魅力

编程语言C++www.share.dydff.com++C语言的魅力

编程语言C++www.share.febjt.com++C语言的魅力

编程语言C++www.share.miliriben.com++C语言的魅力

编程语言C++www.share.xmyhjc.com++C语言的魅力

编程语言C++www.share.ankezt.com++C语言的魅力

编程语言C++www.share.huniupipe.com++C语言的魅力

编程语言C++www.share.dboyxym.com++C语言的魅力

编程语言C++www.share.chrlly.com++C语言的魅力

编程语言C++share.longjigo.com++C语言的魅力

编程语言C++share.xatjfg.com++C语言的魅力

编程语言C++share.baogehuii.com++C语言的魅力

编程语言C++share.hnsaxf119.com++C语言的魅力

编程语言C++share.hdmxw.com++C语言的魅力

编程语言C++share.7caiu.com++C语言的魅力

编程语言C++share.wuxiwjk.com++C语言的魅力

编程语言C++share.parkxh.com++C语言的魅力

编程语言C++share.mshxue.net++C语言的魅力

编程语言C++share.hhjtep.com++C语言的魅力

编程语言C++share.enneragram.com++C语言的魅力

编程语言C++share.ccynyk.com++C语言的魅力

编程语言C++share.dongmiandaojia.com++C语言的魅力

编程语言C++share.sunzhihuiyd.com++C语言的魅力

编程语言C++share.whxhby.net++C语言的魅力

编程语言C++share.lunwenpingshen.com++C语言的魅力

编程语言C++share.lcfxnyidx.com++C语言的魅力

编程语言C++share.zhaimeiti.com++C语言的魅力

编程语言C++share.19kc.cn++C语言的魅力

编程语言C++share.bangnitesw.com++C语言的魅力

编程语言C++share.acbrick.com++C语言的魅力

编程语言C++share.xjzcxgy.com++C语言的魅力

编程语言C++share.dydff.com++C语言的魅力

编程语言C++share.febjt.com++C语言的魅力

编程语言C++share.miliriben.com++C语言的魅力

编程语言C++share.xmyhjc.com++C语言的魅力

编程语言C++share.ankezt.com++C语言的魅力

编程语言C++share.huniupipe.com++C语言的魅力

编程语言C++share.dboyxym.com++C语言的魅力

编程语言C++share.chrlly.com++C语言的魅力

相关推荐
蒸蒸yyyyzwd19 分钟前
机试学习笔记
c++·求职招聘
handler011 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
郝学胜-神的一滴2 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio
hetao17338373 小时前
校内场-提高组 ZYZSC-S-Round 4
c++·算法
stellanke4 小时前
Linux网络编程实战2:TCP Socket 基础与实践
linux·网络·c++
蒸蒸yyyyzwd4 小时前
机试和Redis学习笔记
c++·笔记·面试
tdtsmt5 小时前
2026年SMT贴片加工选型指南:天地通电子推荐参考
c++
一木 之林5 小时前
插件、MCP、Skill 的区别?
java·c++·人工智能
ShineWinsu6 小时前
对于MySQL:内置函数的解析
linux·数据库·c++·mysql·面试·函数·查询
程序猿编码8 小时前
纯C++轻量计算机视觉推理引擎:基于GGML的端侧CV模型部署技术全解析
开发语言·c++·计算机视觉·大模型·transformer