精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++ 面試題:C++中 constexpr 函數的限制有哪些?

開發
在 C++ 中,字面類型(Literal Type) 是指可以在編譯期確定其值的類型,是支持編譯期計算的基礎。

注意這道面試題,問的不是 constexpr 的用法,是限制有哪些?

一、基本限制

參數和返回類型必須是字面類型。

我們理解下什么是字面類型?

在 C++ 中,字面類型(Literal Type) 是指可以在編譯期確定其值的類型,是支持編譯期計算的基礎。

1. C++ 標準規定,以下類型屬于字面類型:

(1) 基本類型

int, char, bool, float, double, long, short, unsigned 等。

nullptr_t(C++11 起)。

constexpr int x = 42;  // int 是字面類型
constexpr char c = 'A'; // char 是字面類型

(2) 引用類型

引用必須綁定到字面類型。

constexpr int a = 10;
constexpr const int& ref = a;  // 引用是字面類型

(3) 數組類型

數組的元素必須是字面類型。

constexpr int arr[] = {1, 2, 3};  // int[] 是字面類型

(4) 字面值類(Literal Class)

類的所有非靜態成員必須是字面類型。

必須有一個 constexpr 構造函數(可以是默認構造函數或帶參數的構造函數)。

不能有虛函數。(C++20允許字面類型包含虛函數,但是需要滿足不少條件)

struct Point {  // 字面值類
    int x, y;
    constexpr Point(int x = 0, int y = 0) : x(x), y(y) {}  // constexpr 構造函數
};
constexpr Point p(1, 2);  // 編譯期構造

(5) void(C++14 起)

void 也可以算作字面類型,但通常不能直接用于 constexpr 變量。

(6) 標準庫中的某些類型

std::array(如果 T 是字面類型)。

std::string_view(C++17 起)。

#include <array>
constexpr std::array<int, 3> arr = {1, 2, 3};  // std::array 是字面類型

constexpr std::string_view sv = "compile-time"; // 合法,數據是編譯期字面量
// constexpr std::string_view sv2 = std::string("runtime"); // 錯誤:非編譯期數據

std::string("runtime") 會創建一個臨時 std::string 對象,它的底層數據(存儲字符的數組)在內存中的生命周期僅限于當前表達式。當這行代碼執行完畢時,臨時對象會被銷毀,其底層數據也隨之失效。

std::string("runtime") 生成的臨時對象在編譯期上下文中仍然會“邏輯銷毀”,導致 string_view 引用的底層數據在編譯期就失效。

這里最關鍵的就是數據來源的編譯期確定性!

2. 非字面類型的例子

以下類型不是字面類型,因此不能用于 constexpr 上下文:

  • std::string(因為它的動態內存分配不能在編譯期確定)。
  • 帶有虛函數的類(C++20 之前)。
  • 包含非字面類型成員的類。
struct NonLiteral {
    std::string s;  // std::string 不是字面類型
    NonLiteral() {}  // 沒有 constexpr 構造函數
};
// constexpr NonLiteral nl;  // 錯誤:NonLiteral 不是字面類型

3. 為什么 constexpr 限制要求字面類型?

constexpr 的核心目標是編譯期計算,因此:

  • 編譯期可構造:字面類型的對象可以在編譯期初始化。
  • 編譯期可求值:constexpr 函數的參數和返回值必須是編譯期可確定的。
  • 避免運行時依賴:非字面類型(如 std::string)可能涉及動態內存分配,無法在編譯期處理。

二、禁止的操作

以下操作在 constexpr 函數中不允許出現:

1. 動態內存分配

用new/delete 或堆內存操作。

constexpr int* invalid() {
    int* p = new int(42); // 錯誤:不能在編譯時分配內存
    return p;
}

2. 異常處理

不能使用 throw 或 try-catch。

constexpr int unsafe(int a) {
    if (a < 0) throw "negative"; // 錯誤:不允許異常
    return a;
}

3. 調用非 constexpr 函數

只能調用其他 constexpr 函數或編譯器內建函數

int non_constexpr(int x) { return x; }

constexpr int invalid_call(int x) {
    return non_constexpr(x); // 錯誤:調用了非 constexpr 函數
}

4. 修改全局/靜態變量

編譯時上下文無法處理副作用。

全局變量:在程序啟動時(main() 之前)初始化。

靜態變量:

  • 局部 static 變量在第一次進入作用域時初始化(運行時)。
  • 全局 static 變量類似于全局變量。

由于它們的初始化可能依賴運行時狀態,constexpr 無法保證編譯期確定性。

int global = 0;
constexpr void modify_global() {
    global++; // 錯誤:修改全局變量
}

C++標準規定,constexpr函數中不能包含對具有靜態存儲期變量的賦值或修改操作。

三、成員函數的特殊規則

1. 虛函數

  • C++20 前:虛函數不能是 constexpr。
  • C++20 起:允許虛函數為 constexpr。
struct Base {
    virtual constexpr int foo() { return 1; } // C++20 合法
};

2. 隱式 const 限定(C++11)

  • C++11:constexpr 成員函數隱式為 const。
  • C++14:取消此限制,允許修改對象狀態。
struct Widget {
    int value = 0;
    constexpr void update() { value++; } // C++14+ 合法
};

這里其實開始不是很理解,成員變量的修改其實是運行時行為,但是現在要在編譯期搞,查了下資料是這么說的:

constexpr成員函數修改成員變量,在編譯期是邏輯行為,運行時才是真實修改
。是邏輯上的(編譯器模擬,不生成實際的內存寫入)。

我理解是:

  • 對 value 的修改發生在編譯期,最終生成的 value 是一個編譯期常量對象,其狀態被“凍結”為 count = 1。
  • 沒有運行時開銷,value 的值直接編譯進二進制。
  • 這里的“修改”只是邏輯上的操作,不涉及真實內存寫入。
  • 運行時調用 update() 是真正的運行時行為,修改的是內存中的對象。
  • 代碼邏輯與編譯期版本相同,但發生在程序運行時。
  • 對比上面說的全局變量,類成員變量的對象是局部的影響可控,全局變量可能被其他地方修改,所以類成員變量這里可以放開,但是全局變量不行。

四、遞歸深度限制

即使遞歸邏輯合法,編譯器對 constexpr 遞歸深度有默認限制(如 GCC 默認 512 層)。超出限制時需通過編譯選項調整:

g++ -fconstexpr-depth=1000 main.cpp

五、版本差異總結

特性

C++11

C++14+

C++20

函數體復雜度

單條

允許循環、變量

進一步擴展

虛函數支持

不支持

不支持

支持

成員函數隱式

示例:合法與非法用法對比

// 合法:C++14+ 允許循環和局部變量
constexprintsum(int n){
    int total = 0;
    for (int i = 0; i < n; ++i) {
        total += i;
    }
    return total;
}

// 非法:動態內存分配
constexprint* create(){
    int* p = newint(10);
    return p;
}

// 合法:C++20 虛函數
structBase {
    virtualconstexprintget(){ return1; }
};


責任編輯:趙寧寧 來源: CppPlayer
相關推薦

2025-05-20 10:00:00

C++命名空間別名代碼

2025-05-20 08:10:00

函數函數類型函數指針類型

2021-10-27 11:00:30

C++語言面試

2010-01-27 17:16:52

C++構造函數

2024-02-21 23:13:45

C++編程開發

2010-01-26 10:42:26

C++函數

2023-10-08 08:48:38

C++constexpr

2010-01-19 13:43:59

C++函數

2025-05-26 03:20:00

2025-08-19 09:30:34

2011-03-29 14:31:41

CC++

2025-05-27 10:15:00

void*函數開發

2025-04-30 10:10:00

在 C++C++11Lambda

2010-01-27 16:05:06

C++堆棧

2010-01-21 09:34:57

C++語法

2010-01-21 14:07:14

CC++聲明

2025-05-06 08:20:00

互斥鎖C++編程

2025-05-09 09:25:00

2010-01-28 16:31:54

C++類型

2010-01-25 10:25:19

C++變量
點贊
收藏

51CTO技術棧公眾號

伊人久久影院| www.视频在线.com| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲国内精品在线| mm1313亚洲国产精品无码试看| 国产精品ⅴa有声小说| 极品少妇xxxx精品少妇| 久久久久国产精品一区| 黑人巨大精品欧美| 农村妇女一区二区| 亚洲图片欧美视频| 日本在线成人一区二区| 国产丰满美女做爰| 乱码第一页成人| 俺去亚洲欧洲欧美日韩| 波多野结衣影院| 91嫩草国产线观看亚洲一区二区| 午夜一区二区三区在线观看| 亚洲欧美久久久久一区二区三区| 黄片毛片在线看| 久久99久久精品欧美| 4438全国成人免费| 亚洲av鲁丝一区二区三区| 国产精品手机在线播放| 日韩欧美国产系列| 天天干天天综合| 一区二区乱码| 亚洲国产wwwccc36天堂| 国产精品波多野结衣| 日本天堂在线| 成人av网站免费| 亚洲aaa激情| 中文字幕第2页| 美女91精品| 97视频国产在线| 欧美日韩国产精品综合| 国产精品久久久久一区二区三区厕所| 亚洲女人被黑人巨大进入| 三上悠亚 电影| 亚洲毛片在线免费| 欧美日韩综合不卡| 天堂社区在线视频| 忘忧草在线日韩www影院| 亚洲一区二区三区国产| 亚洲欧美一二三| 在线观看免费高清完整| 久久久久久久久免费| 久久久精品国产一区二区三区| 精品久久久中文字幕人妻| 久草精品在线观看| 国产人妖伪娘一区91| 正在播放木下凛凛xv99| 亚洲影院免费| 日本欧美在线视频| 美女又爽又黄免费视频| 国产模特精品视频久久久久| 97久久精品人人澡人人爽缅北| 欧美激情一区二区视频| 欧美激情一区| 欧美激情一区二区久久久| 午夜爱爱毛片xxxx视频免费看| 99精品美女| 久热99视频在线观看| 午夜免费激情视频| 欧美亚韩一区| 久久久久久久久久久av| 国产精品第九页| 一本综合久久| 国产v综合v亚洲欧美久久| 国产成人av免费| 老司机精品视频一区二区三区| 91精品久久久久久久| 国产口爆吞精一区二区| 国产成人免费高清| 国产精品一区二区免费看| 无码国产精品一区二区免费16 | 亚洲精品久久久久久宅男| 色猫猫成人app| 在线播放欧美女士性生活| 老女人性生活视频| 另类尿喷潮videofree| 日韩经典一区二区三区| 久久精品三级视频| 欧美日韩1区2区3区| 26uuu久久噜噜噜噜| 久草热在线观看| 国产精品一区免费在线观看| 国产九色精品| 成人免费一区二区三区视频网站| 亚洲欧洲韩国日本视频| 成年人看的毛片| av日韩亚洲| 91精品在线观看入口| 熟妇人妻久久中文字幕| 成人在线免费观看91| 久久av在线播放| 日本高清不卡码| 国产一区日韩二区欧美三区| 精品无人区一区二区三区竹菊| 成人在线高清视频| 亚洲图片有声小说| 一级黄色录像在线观看| 日韩影视高清在线观看| 色哟哟入口国产精品| 久久精品无码人妻| 免费一级片91| 精品一区二区三区国产| 激情影院在线观看| 欧美日在线观看| 国产探花一区二区三区| 精品国产不卡| 久久久久久一区二区三区| 中文字幕一区二区三区人妻四季| 波多野结衣在线aⅴ中文字幕不卡| 日本黄网免费一区二区精品| 国产第一页在线视频| 欧美日韩大陆一区二区| 精品黑人一区二区三区观看时间| 国产精品久久久久久久久妇女| 日本乱人伦a精品| 亚洲a视频在线观看| 国产精品久久久久四虎| www黄色av| 成人爽a毛片| 欧美成人高清视频| 中文有码在线播放| 久久九九影视网| 国产一级爱c视频| 视频一区国产| 久久国产精品久久久久| 中文字幕 亚洲视频| 久久久99精品久久| 国产成人a亚洲精v品无码| 成人资源在线播放| 久久久国产精品免费| 日韩欧美一级大片| 久久精品欧美日韩| 日本精品www| 亚洲婷婷影院| …久久精品99久久香蕉国产| 婷婷视频在线观看| 亚洲午夜久久久| 国产调教打屁股xxxx网站| 91tv精品福利国产在线观看| 国产精品在线看| h网站在线免费观看| 在线观看日产精品| 久久精品三级视频| 久久国产剧场电影| 中文字幕在线中文字幕日亚韩一区| 午夜av成人| 国产小视频国产精品| 老熟妇一区二区三区| 久久久夜色精品亚洲| 成人黄色片视频| 欧美美乳视频| 国产精品久久久久久av福利软件| 国产午夜精品一区理论片| 色欧美片视频在线观看在线视频| 大黑人交xxx极品hd| 久久精品伊人| 日韩欧美亚洲日产国产| 日韩电影免费观看高清完整版在线观看| 中文字幕亚洲综合| 国产精品自偷自拍| 亚洲电影第三页| 91黄色免费视频| 日韩精品免费专区| 一区二区在线高清视频| 九九九九九九精品任你躁| 色综合久综合久久综合久鬼88 | 秋霞一区二区三区| 欧美极品第一页| 日韩电影免费| 欧美视频日韩视频在线观看| 久久国产波多野结衣| 国产a区久久久| 成人在线免费观看av| 成人综合久久| av色综合网| 中文在线аv在线| 色综合亚洲精品激情狠狠| 精品国自产在线观看| 疯狂蹂躏欧美一区二区精品| 国产成人无码精品久久二区三| 理论片日本一区| 给我免费播放片在线观看| 亚洲瘦老头同性70tv| 国产一区红桃视频| 麻豆视频在线观看免费网站黄| 精品偷拍各种wc美女嘘嘘| 91激情在线观看| 亚洲成人激情综合网| 日本爱爱爱视频| 国产v日产∨综合v精品视频| 黄色a级片免费| 欧美在线观看天堂一区二区三区| 精品无人区一区二区三区竹菊| 亚洲精品大全| 91av视频在线| 在线看女人毛片| 国产一区二区免费| 丁香六月天婷婷| 欧美视频一区二区三区四区| 动漫精品一区一码二码三码四码 | 日韩欧美综合视频| 久久精品日产第一区二区三区高清版| 1314成人网| 青青青伊人色综合久久| 免费毛片网站在线观看| 国产精品久久久久久久久妇女| 蜜桃精品久久久久久久免费影院 | 欧美变态口味重另类| 黄色av网站免费| 亚洲一区二区三区自拍| 亚洲欧美另类日本| 久久久久久**毛片大全| 国产伦理在线观看| 精品亚洲成a人| 国产一区亚洲二区三区| 激情久久中文字幕| 在线观看18视频网站| 国产一区二区精品福利地址| 国产66精品久久久久999小说| 婷婷久久免费视频| 国产精品久久久久久久久久小说 | 91精品久久久久久久久中文字幕| 国内精彩免费自拍视频在线观看网址| 久久久精品一区| 69av亚洲| 国产亚洲视频在线观看| 青青青手机在线视频观看| 亚洲成人xxx| 亚洲国产精品久久人人爱潘金莲| 欧美丰满高潮xxxx喷水动漫| 久久国产香蕉视频| 在线观看亚洲精品| 人妻丰满熟妇av无码区| 欧美日韩国产在线| 日韩三级免费看| 亚洲第一综合色| 国产成年人免费视频| 亚洲一区国产视频| 国产在线视频二区| 亚洲va天堂va国产va久| 国产无套内射又大又猛又粗又爽| 亚洲综合久久久久| 国产奶水涨喷在线播放| 午夜精品久久久久久久久久| 国产一级做a爱免费视频| 亚洲一区二区三区四区五区中文| 久久99久久98精品免观看软件 | 91在线观看一区二区| 800av在线播放| 99精品久久免费看蜜臀剧情介绍| 国产伦精品一区三区精东| 99精品热视频| 小早川怜子久久精品中文字幕| 久久香蕉国产线看观看99| 日韩精品电影一区二区| 中文字幕不卡的av| 少妇视频一区二区| 亚洲精品视频一区二区| 久久精品亚洲无码| 欧美色videos| 中文字幕av在线免费观看| 在线观看91av| www.99视频| 日韩av中文字幕在线| 国产在线日本| 日韩三级成人av网| 日本高清成人vr专区| 68精品久久久久久欧美| 日本.亚洲电影| 91九色国产在线| 久久国产精品免费精品3p| 欧美精品一区二区三区在线看午夜| 青青草91久久久久久久久| 少妇高潮流白浆| 亚洲国产一区二区三区高清| 国产真人无码作爱视频免费| 激情综合网最新| 少妇被狂c下部羞羞漫画| 欧美极品xxx| 久久97人妻无码一区二区三区| 精品久久久久久久中文字幕 | 毛片av一区二区| 日本黄色大片在线观看| 久久人人爽爽爽人久久久| 999精品视频在线观看播放| 亚洲成人av中文| 亚洲av无码不卡| 欧美成人猛片aaaaaaa| 国产精品一区二区三区四区色| 欧美成人精品在线| 日本久久免费| 99精品99久久久久久宅男| 岳的好大精品一区二区三区| 超级碰在线观看| 日韩主播视频在线| 国产精品果冻传媒| 国产精品第四页| 国产黄色片免费看| 日韩视频在线永久播放| 国产98在线| 97碰在线观看| 午夜电影一区| 亚洲午夜精品福利| 久久先锋资源| 99热超碰在线| 亚洲欧美区自拍先锋| 中文字幕免费视频观看| 日韩av在线资源| 麻豆av在线免费观看| 91精品国产自产在线老师啪| 国产成人短视频在线观看| 国产乱子伦精品无码专区| 久久精品国产精品青草| 亚洲熟妇一区二区三区| 亚洲一二三区不卡| 国产精品无码久久av| 最新69国产成人精品视频免费| 中文字幕高清在线播放| 国产精品一区二区三区免费| 婷婷亚洲图片| 成人综合久久网| 欧美国产精品一区| 日韩综合在线观看| 日韩av中文在线| 97人人爽人人澡人人精品| 国产精品国产精品| 中文av一区| 亚洲精品午夜在线观看| 久久久久九九视频| 国产又粗又猛又黄视频| 日韩精品在线私人| 蜜桃视频www网站在线观看| 成人av片网址| 欧美日韩影院| 熟女人妻一区二区三区免费看| 亚洲私人黄色宅男| 国产又粗又猛又爽又黄视频| 中文字幕亚洲无线码a| 色综合久久久| 中国老女人av| 国产激情91久久精品导航 | 不卡一卡2卡3卡4卡精品在| 亚洲精品国产首次亮相| 天天干天天曰天天操| 夜夜精品视频一区二区| 亚洲女同志亚洲女同女播放| 久久久久久久久久久免费精品| 9国产精品午夜| 国产视频九色蝌蚪| 久久亚洲捆绑美女| 中文字幕人妻互换av久久| 最近2019中文字幕一页二页| 午夜精品久久久久久毛片| 亚洲自拍偷拍一区二区三区| 国产乱码字幕精品高清av | 久久亚洲天堂| 97se亚洲综合在线| 亚洲精品美女| 亚洲精品国产91| 欧美日韩另类国产亚洲欧美一级| 麻豆视频在线观看免费| 99re国产视频| 国产日韩欧美一区| 中文字幕第24页| 日韩亚洲欧美在线| 国产精品一区二区在线免费观看| 经典三级在线一区| 免费视频一二三区| 精品偷拍各种wc美女嘘嘘| 国产精成人品2018| 国产亚洲精品久久久久久久| 成人国产在线观看| 五月婷婷六月婷婷| 欧美www在线| 欧美网色网址| 精品亚洲一区二区三区四区| 亚洲欧美日韩在线不卡| 少妇一区二区三区四区| 国产精品jizz在线观看麻豆| 亚洲欧美色图| yy6080午夜| 在线电影院国产精品| 三级中文字幕在线观看| 亚洲日本精品国产第一区| 高清国产一区二区| 一级特黄免费视频| 久久99久久久久久久噜噜| 久久不见久久见免费视频7| 午夜一区二区视频| 欧美日韩亚洲天堂| 黄在线免费看| 日韩欧美在线一区二区| 成人在线视频一区| 在线观看视频二区| 久久人人爽人人|