最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 靜態(tài)成員的類內初始化詳解及實例代碼

 更新時間:2017年02月27日 08:50:57   投稿:lqh  
這篇文章主要介紹了C++ 靜態(tài)成員的類內初始化詳解及實例代碼的相關資料,需要的朋友可以參考下

C++ 靜態(tài)成員的類內初始化詳解及實例代碼

一般來說,關于C++類靜態(tài)成員的初始化,并不會讓人感到難以理解,但是提到C++ 靜態(tài)成員的"類內初始化"那就容易迷糊了。

我們來看如下代碼:

//example.h
#include<iostream>
#include<vector>
using namespace std;

class Example{
public:
  static double rate = 6.5;
  static const int vecSize = 20;
  static vector<double> vec(vecSize);
};

//example.cpp
#include "example.h"
double Example::rate;
vector<double> Example::vec;

我們需要判斷上面的靜態(tài)數(shù)據(jù)成員的聲明和定義有沒有錯誤,并解釋原因。

首先,要謹記:通常情況下,不應該在類內部初始化成員,無論是否為靜態(tài)成員。

其次,若一定要在類內初始化靜態(tài)成員,那么就必須滿足如下條件才行:

1) 靜態(tài)成員必須為字面值常量類型的constexpr。

      所謂的字面值類型就是通常遇到的:算術類型,引用,指針等。字面值常量類型就是const型的算術類型,引用,指針等。

      所謂的constexpr,就是常量表達式,指值不會改變且在編譯過程中就能得到計算結果的表達式。比如字面值,或者用常量表達式初始化的const對象也是常量表達式。為了幫助用戶檢查自己聲明/定義的變量的值是否為一個常量表達式,C++11新規(guī)定,允許將變量聲明為constexpr類型,以便由編譯器來進行驗證變量是否為常量表達式。

2)給靜態(tài)成員提供的初始值,必須為常量表達式

注意:在C++ primer 第五版中說:只能給靜態(tài)成員提供const 整數(shù)類型的類內初始值,且該const整數(shù)類型的初始值必須是常量表達式。我覺得是有誤的!詳情見后面分析。

有了這兩條原則,我們就可以對上面的代碼進行驗證了。

1)static double rate = 6.5;

顯然不滿足第一條:因為rate不是常量類型。改成constexprt static const double rate = 6.5即可

從這里也可以看出初始值不一定必須為const 整數(shù)類型。

ps: 如果我們不再這里加入constexprt修飾符的話,編譯器會提示錯誤:error: ‘constexpr' needed for in-class initialization of static data member ‘const double Example::rate' of non-integral type [-fpermissive]

大體意思就是,對于非const整數(shù)類型的初始值,如果它是常量表達式的話,我們需要手工在前面添加修飾符constexprt。

至于Example.cpp文件中的定義部分,由于我們已經(jīng)在類內部進行了初始化,就不需要再在類外部進行定義了。如果非要定義的話,必須采用如下格式:

//example.cpp


constexpr const double Example::rate; //其中的const是可以刪除的,因為constexprt本身就包含了const

2)static const int vecSize = 20;

vecSize是const int類型的,且為常量表達式——滿足第一條;提供的初始值為20,是一個常量表達式——滿足第二條!且由于是const int型的,前面可以不用修飾符constexpr。

3)static vector<double> vec(vecSize);

錯誤!vector是模板不是字面值常量類型,所以不滿足第一條。應該改為 static vector<double> vec; //僅僅且只能進行聲明,不能定義

然后在Example.cpp中進行定義:

static vector<double> vec(Example::vecSize);

現(xiàn)在我們可以在Example.cpp中添加測試代碼進行測試了:

#include "example.h"
vector<double> Example::vec(Example::vecSize);
constexpr const double Example::rate;

int main(){

  Example::vec.push_back(10.5);
  cout << Example::vec.back() << endl;
  cout << Example::rate << endl;
  cout << Example::vecSize << endl;
}

執(zhí)行結果:

wanchouchou@wanchouchou-virtual-machine:~/c++/7.5$ ./Example 
10.5
6.5
20

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • 詳解C++中二進制求補運算符與下標運算符的用法

    詳解C++中二進制求補運算符與下標運算符的用法

    這篇文章主要介紹了C++中二進制求補運算符與下標運算符的用法,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2016-01-01
  • 利用C++開發(fā)一個protobuf動態(tài)解析工具

    利用C++開發(fā)一個protobuf動態(tài)解析工具

    數(shù)據(jù)庫中存儲的protobuf序列化的內容,有時候查問題想直接解析查看內容。很多編碼在網(wǎng)上很容易找到編解碼工具,但protobuf沒有找到編解碼工具,可能這樣的需求比較少吧,那就自己用C++實現(xiàn)一個,感興趣的可以了解一下
    2023-01-01
  • C語言中斐波那契數(shù)列的三種實現(xiàn)方式(遞歸、循環(huán)、矩陣)

    C語言中斐波那契數(shù)列的三種實現(xiàn)方式(遞歸、循環(huán)、矩陣)

    本文主要介紹了C語言中斐波那契數(shù)列的三種實現(xiàn)方式(遞歸、循環(huán)、矩陣),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++中IO多路復用(select、poll、epoll)的實現(xiàn)

    C++中IO多路復用(select、poll、epoll)的實現(xiàn)

    I/O多路復用是一種并發(fā)處理多個I/O操作的機制,本文主要介紹了C++中IO多路復用(select、poll、epoll)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • C語言 結構體和指針詳解及簡單示例

    C語言 結構體和指針詳解及簡單示例

    本文主要介紹C語言 結構體和指針,這里整理了相關資料,并附示例代碼和實現(xiàn)結果,以便大家學習參考,希望能幫助學習C語言的朋友
    2016-08-08
  • C++?Qt開發(fā)之運用QJSON模塊解析數(shù)據(jù)

    C++?Qt開發(fā)之運用QJSON模塊解析數(shù)據(jù)

    JSON(JavaScript?Object?Notation)是一種輕量級的數(shù)據(jù)交換格式,它易于人閱讀和編寫,也易于機器解析和生成,本文主要介紹了Qt如何運用QJson組件的實現(xiàn)對JSON文本的靈活解析功能,需要的可以參考下
    2024-01-01
  • C語言中用棧+隊列實現(xiàn)隊列中的元素逆置

    C語言中用棧+隊列實現(xiàn)隊列中的元素逆置

    這篇文章主要介紹了C語言中用利用棧和隊列實現(xiàn)隊列中的元素逆置的相關資料,對正在學習的小伙伴有一定的參考價值,需要的可以參考一下,希望對你有所幫助
    2022-02-02
  • C語言基礎之malloc和free函數(shù)詳解

    C語言基礎之malloc和free函數(shù)詳解

    這篇文章主要介紹了C語言基礎之malloc和free函數(shù)詳解的相關資料,需要的朋友可以參考下
    2017-04-04
  • C語言統(tǒng)計一篇英文短文中單詞的個數(shù)實例代碼

    C語言統(tǒng)計一篇英文短文中單詞的個數(shù)實例代碼

    本文通過實例代碼給大家介紹的C語言統(tǒng)計一篇英文短文中單詞的個數(shù),代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • C++關于樹的定義全面梳理

    C++關于樹的定義全面梳理

    樹是一種重要的非線性數(shù)據(jù)結構,直觀地看,它是數(shù)據(jù)元素(在樹中稱為結點)按分支關系組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示,本篇介紹二叉樹的遞歸與非遞歸遍歷的方法
    2022-06-06

最新評論

房产| 萨嘎县| 宜昌市| 永兴县| 界首市| 汽车| 曲麻莱县| 思南县| 榆中县| 桐庐县| 蓬安县| 徐水县| 上栗县| 桂林市| 石柱| 宜丰县| 玛沁县| 鄂托克前旗| 宜阳县| 贡觉县| 蓬溪县| 同德县| 台东县| 泰兴市| 濮阳县| 社旗县| 陵川县| 新丰县| 德保县| 保康县| 成安县| 台东县| 登封市| 龙山县| 福鼎市| 天气| 太康县| 探索| 镇赉县| 九龙县| 出国|