網站首頁 編程語言 正文
C++中constexpr函數使用
簡介
constexpr函數指的是在編譯的時候就能得到其返回值的函數,也就是說編譯器將constexpr函數直接轉換成其返回值,因此,constexpr函數都是被隱式地定義為內聯函數。
使用constexpr關鍵字來修飾constexpr函數。
使用方法
有如下代碼:
constexpr int myFunc()
{
? return 1;
}
constexpr int i = myFunc() * 4;
此時,編譯器會將myFunc()函數用其返回值1來代替,在編譯時就可知i的值是4。
注意事項
constexpr函數的返回值類型必須是字面值類型
int g_i = 1;
constexpr int myFunc()
{
? return g_i;
}
此時的返回值g_i不是字面值類型,因此報錯信息為“error C3256: “g_i”: 變量使用不生成一個常量表達式”。
constexpr函數的形參可以是非常量,但是實參必須是常量
constexpr int myFunc(int i)
{
? return i;
}
constexpr int i = myFunc(1) * 4;
此時,myFunc()函數的實參是常量,在編譯時可以直接被替換為1,程序不報錯。
int j = 2;
constexpr int i = myFunc(j) * 4;
此時,myFunc()函數的實參是非常量,程序報錯信息為“error C2131: 表達式的計算結果不是常數”,將j定義為const int則不報錯。
函數體中必須有且只有一條return語句
如下代碼
constexpr int myFunc(int i)
{
? int j;
? return i;
}
程序的報錯信息為“error C3250: “j”: 不允許在“constexpr”函數體中進行聲明”。
C++ constexpr函數的處理
constexpr函數是指用于常量表達式的函數
需要遵守如下約定:
1) 函數的返回類型以及所有形參的類型都得是字面值類型,
2) 函數體中必須有且僅有一條return語句
3) constexpr函數不一定返回常量表達式
constexpr int new_sz(); {return 33;}
constexpr int foo_ = new_sz(); //正確,foo_是常量表達式
原文鏈接:https://blog.csdn.net/hou09tian/article/details/110470363
相關推薦
- 2022-06-11 C#實現文件Move和Copy操作_C#教程
- 2022-11-26 ASP.NET延遲調用或多次調用第三方Web?API服務_實用技巧
- 2022-04-23 Android自定義View實現數字雨效果的全過程_Android
- 2022-03-19 C++?OpenCV技術實戰之身份證離線識別_C 語言
- 2023-03-16 Android藍牙服務啟動流程分析探索_Android
- 2022-10-12 C語言實現面向對象的方法詳解_C 語言
- 2022-04-09 python中異常的傳播詳解_python
- 2022-10-03 Objective-C優雅使用KVO觀察屬性值變化_IOS
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支