c++primer第五版7.23題知識點
class screen {
public:
typedef string::size_type pos;//定義型別成員(string::size_type型別見類下方註釋),還可以使用using型別別名來定義using pos = string::size_type;
screen() = default; //因為我們有定義建構函式,所以預設構造引數應該顯示宣告
screen(pos ht, pos wd, char c) : height(ht), width(wd), contents(ht*wd, c){}
screen(pos ht, pos wd):height(ht), width(wd), contents(ht*wd,' '){}
char get() const { return contents[cursor]; }//隱式內聯
inline char get(pos ht, pos wd) const;//顯示內聯
screen &move(pos r, pos c);
private:
pos cursor = 0;
pos height = 0, width = 0;
string contents;
};
/*
string::size_type型別
從邏輯上講size()成員函式應該返回整形數值,但事實上返回的string::size_type型別的值。
我們需要對這種型別做一些解釋。string類型別和許多其他庫型別都定義了一些夥伴型別(companion types)。這些夥伴型別使得庫型別的使用是機器無關的(machine-independent)。
size_type就是這些夥伴型別中的一種。它定義為與unsigned型(unsigned int或unsigned long)具有相同的含義,而且可以保證足夠大可儲存任意string物件的長度。
為了使用由string型別定義的size_type型別,程式設計師必須加上作用域操作符來說明所使用的size_type型別是由string類定義的。
任何儲存string的size操作結果的變數必須為string::size_type型別。特別重要的是,不要把size的返回值賦給一個int變數。
雖然我們不知道string::size_type的確切型別,但可以知道它是unsigned型(2.1.1節)。對於任意一種給定的資料型別,它的unsigned型所能表示的最大正數值比對應的signed要大一倍。
這個事實表明size_type儲存的string長度是int所能儲存的兩倍。
使用int變數的另一個問題是,有些機器上int變數的表示範圍太小,甚至無法儲存實際並不長的string物件。如在有16位int型的機器上,int型別變數最大隻能表示32767個字元的string物件。
而能容納一個檔案內容的string物件輕易就會超過這個數字。因此,為了避免溢位,儲存一個string物件size的最安全的方法就是使用標準庫型別string:: size_type。
*/
相關文章
- 筆試題知識點總結筆試
- Oracle 選擇題知識點整理Oracle
- 錯題知識點回顧1
- 知識點
- Redis知識點&面試題總結Redis面試題
- 認知網路知識點及例題總結
- Kafka面試題——20道Kafka知識點Kafka面試題
- rabbitmq 知識點MQ
- SQL知識點(+)SQL
- 前端知識點前端
- Android 知識點Android
- Weex 知識點
- Promise知識點Promise
- Laravel 知識點Laravel
- MySQL知識點MySql
- 知識點——terms
- ajax知識點
- 通用知識點
- 混合知識點
- Redis知識點Redis
- JavaWeb知識點JavaWeb
- JS知識點:ES6 中常見的知識點JS
- 攜程演算法筆試題知識點演算法筆試
- 浮點數小知識點
- 7.23 ASCIIASCII
- 知識點記錄
- Python知識點(二)Python
- Python知識點(一)Python
- js小知識點JS
- 知識點總結
- mongo 小知識點Go
- Runtime知識點整理
- 計組知識點
- Promise重要知識點Promise
- 面試知識點面試
- webpack常用知識點Web
- MongoDB知識要點MongoDB
- Laravel Model 知識點Laravel