1 超出資料型別指定長度的賦值
(1)無符號資料型別
unsigned char ch1= 336;
unsigned char ch2 = -1;
上面兩個賦值都超出了unsigned char 型別的範圍,大部分的編譯器對這種情況是這麼處理的:允許賦值,僅僅給出乙個警告,但是是經過modulo之後的值。
cout<(2) 對於有符號的書來說,要根據具體的編譯器來定。
2 浮點型的有效數字
float型別僅提供6位有效數字,double型別至少提供10位有效數字
3 definitions 和declarations(變數的定義和宣告)
主要的區別就是定義要分配儲存空間,宣告不分配存數空間,僅僅誰說明名字是什麼,型別是什麼而已。看看下面集中定義和宣告的方式:
extern int i; // 宣告
int i; //定義
extern double pi = 3.14 // 定義
4 變數的作用範圍
從宣告開始到範圍結束,區域性變數覆蓋全域性變數,看下面的**片段
int i = 100, sum = 0;for (int i = 0; i != 10; ++i)
sum += i;
std::cout << i << " " << sum << std::endl
輸出結果應該是: i= 100 sum = 45
int sum = 0;
for (int i = 0; i != 10; ++i)
sum += i;
std::cout << "sum from 0 to " << i << " is " << sum << std::endl;
編譯出錯,因為i沒有被定義(cout中的i)
5 const 變數的作用範圍
const的變數的作用範圍是本檔案,即使它被宣告成全域性變數。要想在其他檔案中使用本檔案中定義的const變數,看下面**
// file_1.cc
// defines and initializes a
const
that is accessible to other files
extern const int bufsize = fcn();
// file_2.cc
extern const int bufsize;
// uses
bufsize
from
file_1
//uses
bufsize
defined in
file_1
for (int index = 0; index != bufsize; ++index)
// ...
在宣告和定義處都需要加extern關鍵字
6 vector::const_iterator 和 const vector::iterator
看下面兩個例子,就能明白二者的區別
for (vector::const_iterator iter = text.begin();
iter != text.end(); ++ iter)
*iter = " "; // error:
*iter
isconst
vector::const_iterator iter 允許自身變化,但不允許修改它下面指向的資料,即指向的內容是常量
vectornums(10); // nums
is non
const
const vector::iterator cit = nums.begin();
*cit = 1; // ok:
citcan change its underlying element
++cit; // error: can't change the value of
citconst vector::iterator cit 允許修改它指向的下面的資料,不允許自身的變化,即本身是個常量
7 typedef string *pstring
const pstring cstr; 解釋這個宣告的意思?
相信大部分人是這麼理解的,typedef string *pstring 是定義了乙個指向string 的指標型別,因此const pstring cstr <=> const string * cstr
即 指向乙個const string的指標,但是這是錯誤的。
正確的解釋應該是, cstr是乙個const指標,指向string型別的字串
C 容易忽略的細節
1 超出資料型別指定長度的賦值 1 無符號資料型別 unsigned char ch1 336 unsigned char ch2 1 上面兩個賦值都超出了unsigned char 型別的範圍,大部分的編譯器對這種情況是這麼處理的 允許賦值,僅僅給出乙個警告,但是是經過modulo之後的值。cou...
C 容易忽略的細節
1 超出資料型別指定長度的賦值 1 無符號資料型別 unsigned char ch1 336 unsigned char ch2 1 上面兩個賦值都超出了unsigned char 型別的範圍,大部分的編譯器對這種情況是這麼處理的 允許賦值,僅僅給出乙個警告,但是是經過modulo之後的值。cou...
android容易忽略的技術細節
1 在onpause 中進行資料持久化。activity的生命週期為oncreate onrestart onstart onresume onpause onstop ondestroy 其中oncreate onrestart onstart onresume 執行結束後不能立即結束程序,所以o...