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面試題
- JavaScript的基礎知識點(面試題)JavaScript面試題
- 牛客網題目知識點收集
- linux知識知識點總結Linux
- Promise知識點Promise
- 面試知識點面試
- Laravel 知識點Laravel
- 通用知識點
- 前端知識點前端
- ajax知識點
- rabbitmq 知識點MQ
- Redis知識點Redis
- SQL知識點(+)SQL
- JavaWeb知識點JavaWeb
- MySQL知識點MySql
- 知識點——terms
- Weex 知識點
- mybatis知識點MyBatis
- SASS知識點
- git 知識點Git
- KVO知識點
- iOS 知識點iOS
- Web知識點Web
- mongoDB知識點MongoDB
- qc知識點
- ASM知識點ASM
- 混合知識點
- 命題邏輯重要知識點筆記筆記
- JS知識點:ES6 中常見的知識點JS
- 攜程演算法筆試題知識點演算法筆試
- 認知網路知識點及例題總結
- MySQL 鎖常見知識點&面試題總結MySql面試題
- 7.23 ASCIIASCII