在函式內部使用namespace:
#include
#include
intmain()
在 main() 函式中宣告命名空間 std,它的作用範圍就位於 main() 函式內部,如果在其他函式中又用到了 std,就需要重新宣告:
#include
void
func()
intmain()
如果希望在所有函式中都使用命名空間 std,可以將它宣告在全域性範圍中:
#include
//宣告命名空間std
using
namespace std;
void
func()
intmain()
const
int m =10;
int n = m;
在c語言中,編譯器會先到 m 所在的記憶體取出乙份資料,再將這份資料賦給 n;而在c++中,編譯器會直接將 10 賦給 n,沒有讀取記憶體的過程,和int n = 10;的效果一樣。c++ 中的常量更類似於#define命令,是乙個值替換的過程,只不過#define是在預處理階段替換,而常量是在編譯階段替換。看乙個例子:
int
main()
將上述**編譯成彙編檔案:
g++ -s -o test.s test.cpp
cat test.cpp
.file "test1.cpp"
.text
.globl main
.type main, @function
main:
.lfb0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $10, -8(%rbp)
movl $10, -4(%rbp)
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret.cfi_endproc
.lfe0:
.size main, .-main
.ident "gcc: (ubuntu/linaro 4.6.4-6ubuntu2) 4.6.4"
.section .note.gnu-stack,"",@progbits
從上面的彙編檔案可以看出,a和b在棧上面分配記憶體,給b賦值時如下:
movl $10, -4(%rbp)
直接賦值為10,並沒有從a中(-8(%rbp))中取出來。修改一下:
int
main()
編譯為彙編之後檢視:
.file "test1.cpp"
.text
.globl main
.type main, @function
main:
.lfb0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $10, -8(%rbp)
movl -8(%rbp), %eax
movl %eax, -4(%rbp)
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret.cfi_endproc
.lfe0:
.size main, .-main
.ident "gcc: (ubuntu/linaro 4.6.4-6ubuntu2) 4.6.4"
.section .note.gnu-stack,"",@progbits
從上面可以看出,先將a賦值為10:
movl $10, -8(%rbp)
然後將a傳給eax暫存器(為什麼不直接賦值而要經過eax暫存器呢,這是由cpu內部結構所決定的):
movl -8(%rbp), %eax
最後將eax賦值給b(-4(%rbp)):
movl %eax, -4(%rbp)
從這一系列的賦值可以看出沒有const時,b = a這句**會將a從記憶體中取出來,然後再賦值給b。
我們知道,普通全域性變數的作用域是當前檔案,但是在其他檔案中也是可見的,使用extern宣告後就可以使用,但是在c++中,全域性const變數的作用域只是當前檔案,例如:
main.c
#include
extern
int test;
intmain()
test.c
const
int test =
10;
編譯執行:
gcc main.c test.c
./a.out
test=
10
將main.c改為main.cpp,test.c改為test.cpp,然後用g++編譯:
g++ main.cpp test.cpp
/tmp/ccmxko6d.o:在函式『main』中:
main.cpp:
(.text+
0x6):對『test』未定義的引用
collect2: ld returned 1 exit status
由上可見,c++中全域性const變數只在當前檔案可見,這樣就可以將它放在標頭檔案中,即使多次包含也不會出錯。 初步C 類模板學習筆記
實現 在上課時間的定義給它的乙個或多個引數,這些引數代表了不同的資料型別。抽象的類。在呼叫類模板時,指定引數,由編譯系統依據引數提供的資料型別自己主動產生對應的模板類 詳細的類。c 的類模板的寫法例如以下 template 型別參數列 型別參數列的寫法就是 class 型別引數1,class 型別引...
c 初步學習
其實.net就是乙個開發平台,c 是在這個平台之上進行開發的,下圖是.net的框架 clr 公共語言執行時 cls 公共語言規範 cts 通用型別系統 我們可以從以下幾方面來展開學習 變數的命名規則 1 必須以字母或 符號開頭,不能以數字開頭 2 後面可以跟任意字母 數字 下劃線 3 不能用關鍵字 ...
C 初步學習
這學期有了c 開發這門課.先做了計算器,還有進製轉換,別人看來似乎很強,其實在acm中算是兩個簡單的水題了.參加競賽一年下來,發現學到的演算法和資料結構都是十分有用的東西。計算器最核心的其實就是中綴表示式轉字尾表示式,這就是hdu上的那題 簡單計算器 再加上開發工具做一下介面,套上之前的ac 就直接...