初始化
變數是命名的物件或引用,提供乙個具名的、可供程式操作的儲存空間。定義乙個變數的基本形式是:首先是型別說明符,然後緊跟由逗號分隔的變數名組成的列表,最後以分號結束。
type objlist;
int sum = 0, value; // 定義兩個int型變數,同時為sum賦初值為0
在c++中,初始化和賦值是兩個完全不同的操作。初始化時建立變數時賦予其乙個初始值,變數一般都應該被初始化;而賦值是抹去物件當前值,以乙個新值來替代。
如果定義變數時沒有指定初值,則變數被預設初始化。定義於任何函式體之外的的變數被預設初始化為0。而定義在函式體內部的內建型別變數將不被初始化,其值是未定義的。類物件如果沒有顯式地初始化,則其值由類決定。
std::string g_str; // 預設初始化為空字串
int g_int; // 預設初始化為0
int main()
宣告和定義
c++是一種靜態型別語音,即在編譯階段檢查型別。靜態型別檢查要求編譯器必須知道每乙個實體物件的型別,因此變數必須在定義或宣告後才能使用。
宣告規定了變數的型別和名字;定義除了規定變數的型別和名字,還申請了儲存空間,也可能會為變數賦初值。如果想宣告乙個變數而非定義它,就在變數名前新增關鍵字extern
,而且不要顯式地初始化變數。任何包含顯式初始化的宣告即成為定義。
extern int i; // 宣告i而非定義i
int j; // 宣告並定義j;
extern double pi = 3.1416; // 宣告並定義了pi,顯式初始化為3.1416
變數只能被定義一次,但可以多次宣告。在多個檔案中使用同乙個變數,必須將宣告和定義分離,變數的定義有且只能出現在乙個檔案中,絕不可再其他檔案中重複定義。
識別符號
識別符號即變數名,規定:
只能包含字母、數字和下劃線,且必須以字母和下劃線開頭;
不能以c++保留字作為識別符號;
使用者自定義的識別符號中不能連續出現兩個下劃線,也不能以下劃線緊連大寫字母開頭;
定義在函式體外的識別符號不能以下劃線開頭;
沒有長度限制,但大小寫敏感。
c++關鍵字
alignas
constexpr
extern
noexcept
static_assert
union
alignof
const_cast
false
nullptr
static_cast
unsigned
asmcontinue
float
operator
struct
using
auto
decltype
forprivate
switch
virtual
bool
default
friend
portected
template
void
break
delete
goto
public
this
volatile
case
doif
rergister
thread_local
wchar_t
catch
double
inline
reinterpret_cast
throw
while
char
dynamic_cast
intreturn
ture
char16_t
else
long
short
trychar32_t
enum
mutable
signed
typedef
class
explicit
namespace
sizeof
typeid
const
export
newstatic
typename
c++操作符替代名
替代名and
bitand
compl
not_eq
or_eq
xor_eq
and_equ
bitor
notor
xor操作符&&&
~!=|=^
&=|!||
^= 變數命名有很多約定俗成的規範,有助於提高**的可讀性,具體可參考《google c++ 程式設計規範》第六章命名約定。
名字的作用域
c++中大多數作用域都以花括號分隔,同乙個名字在不同的作用域中可能指向不同的實體。名字的有效區域始於名字宣告處,結束於所在作用域的末端。
作用域可以包含彼此,被包含的作用域稱為內層作用域,包含著別的作用域的作用域稱為外層作用域。
作用域中宣告的名字可以被它所巢狀的所有作用域訪問,內層作用域若宣告定義了與外層相同的名字,外層作用域中已存在的名字將被覆蓋。使用作用域操作符(::
)可以訪問被覆蓋的外層作用域的名字。
// pro.cpp
#include // reuse擁有全域性作用域
int reuse = 42;
int main()
// 這裡編譯器會報錯
// error: 'inif' was not declared in this scope.
//std::cout << inif << std::endl;
// 覆蓋了全域性變數reuse
double reuse = 3.14;
// 必須使用(::)顯示訪問外層作用域中相同的名字
std::cout << reuse << "\t" << ::reuse << std::endl;
return 0;
}
$ ./pro.out
42 0
1 33
3.14 42
一般來說,不宜定義於全域性作用域同名的區域性變數。 C Primer 筆記 變數
1.初始化不是賦值,初始化的含義是建立變數時賦予其乙個初始值,而賦值的含義是把物件的當前值擦除,而以乙個新值來代替。2.使用列表初始化內建型別的變數時,如果初始值存在丟失資訊的風險,則編譯器將報錯。int i 錯誤 3.如果想宣告乙個變數而非定義它,就在變數名前新增關鍵字extern,而且不要顯示的...
C primer學習筆記(三)
注意事項 sizeof是乙個運算子,而不是函式,雖然用起來非常像函式。作用 返回乙個型別或變數的位元組長度。用法 位於std命名空間內有控制符 dec oct 和 hex,用於更改cout輸出數時的預設進製,預設為十進位制。使用方法如下 其他相關 省略 using namespace std int...
C Primer 筆記之 變數和函式
32位機器上 cout 輸出 4 4 8 8 4也就是說只有long long 以及double是占用8個位元組的。1 引用和指標一樣,是繫結對物件的另外乙個名字,改變它或者它繫結的物件,都會使雙方改變 2 必須是乙個物件的別名,int b 1 是錯的 3 若繫結的物件時const型別,那麼引用也必...