C++常量表達(dá)式和constexpr

常量表達(dá)式

常量表達(dá)式是指不會(huì)改變且在編譯過程中就能得到計(jì)算結(jié)果的表達(dá)式,比如下面的10,value1 + 1,value1 ,value2都是常量表達(dá)式。

int main()
{
    const int value1 = 10;
    const int value2 = value1 + 1;
    return 0;
}

constexpr

constexpr和const很像,有如下區(qū)別

  • 使用constexpr修飾的變量將在編譯期間就運(yùn)算出結(jié)果,而使用const修飾的變量只保證運(yùn)行時(shí)不會(huì)被修改。
int main()
{
    const int value1 = 10;
    constexpr int value2 = value1 + 1;
    return 0;
}

  • constexpr只能修飾字面值類型,如算術(shù)類型,引用和指針,而const可以修飾類類型。
int main()
{
    const std::string str=nullptr;//正確
    constexpr std::string value2 = nullptr;//錯(cuò)誤
    return 0;
}
  • 修飾指針時(shí)表達(dá)的意義不同。
int main()
{
    const int *p1=nullptr;//指向整形常量的指針
    constexpr int *p1 = nullptr;//指向整形的常量指針
    return 0;
}

constexpr函數(shù)

constexpr函數(shù)指能用于常量表達(dá)式的函數(shù),函數(shù)的返回值類型以及所有形參類型都必須是字面值類型,有且只能有一個(gè)return語句。constexpr函數(shù)通常放在頭文件而不是源文件中。

#include <cstdio>
#include <string>
#include <iostream>

constexpr int getMbyte(int value)
{
    return value * 1024 * 1024;
}

int main()
{
    std::cout << getMbyte(2) << std::endl;
    return 0;
}

IDA中對(duì)應(yīng)的代碼

int __cdecl main()
{
  int v0; // eax@1

  v0 = std::basic_ostream<char,std::char_traits<char>>::operator<<(
         std::cout,
         0x200000,
         std::endl<char,std::char_traits<char>>);
  std::basic_ostream<char,std::char_traits<char>>::operator<<(v0);
  return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基本內(nèi)置類型 算術(shù)類型字符整型布爾值浮點(diǎn)數(shù) 空類型(void) 算術(shù)類型 帶符號(hào)類型和無符號(hào)類型int、short...
    2625K閱讀 3,630評(píng)論 0 1
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,661評(píng)論 1 51
  • 文/酒十三 001企業(yè)家的目的 很多人都會(huì)有這樣的夢(mèng)想:當(dāng)企業(yè)家,賺很多很多的錢。其實(shí)這個(gè)邏輯是錯(cuò)誤的!真正的企業(yè)...
    酒十三閱讀 645評(píng)論 0 8
  • 覺察1:老板給我的感覺是:嚴(yán)肅、急燥,很難相處,脾氣爆燥,善變 覺察2:老板令我憤怒的是:說話不算數(shù) 覺察3:老板...
    雨淇_c7a7閱讀 237評(píng)論 0 0
  • 這兩天從“堅(jiān)持星球訓(xùn)練營(yíng)”里聽到了兩個(gè)關(guān)于演講的技巧,感覺好實(shí)用,決定在以后的日子里盡量去學(xué)以致用。可以用學(xué)到的技...
    biliali閱讀 302評(píng)論 0 3

友情鏈接更多精彩內(nèi)容