您好,登錄后才能下訂單哦!
static 的用法
static關(guān)鍵字是C, C++中都存在的關(guān)鍵字, 它主要有三種使用方式, 其中前兩種只指在C語(yǔ)言中使用, 第三種在C++中使用(C,C++中具體細(xì)微操作不盡相同, 本文以C++為準(zhǔn)).
(1)局部靜態(tài)變量
(2)外部靜態(tài)變量/函數(shù)
(3)靜態(tài)數(shù)據(jù)成員/成員函數(shù)
下面就這三種使用方式及注意事項(xiàng)分別說(shuō)明
(1)局部靜態(tài)變量
定義在代碼塊中,只做用于代碼塊內(nèi)
#include<iostream>
using namespace std;
int global = 3;
static int s_external = 4;
void func(){
static int sta = 1; //這里就是局部靜態(tài)變量 只初始一次,
sta++;
cout << sta << endl;
}
int main(){
func();//這里會(huì)輸出2
func();//這里會(huì)輸出3
system("pause");
return 0;
}
如此就可以看出靜態(tài)局部變量的作用了。
(2)外部靜態(tài)變量/函數(shù)
這里的靜態(tài)變量和函數(shù),就不是用于區(qū)分存儲(chǔ)的可持續(xù)了,而是區(qū)分是否是內(nèi)部鏈接的(通俗說(shuō)就是外部不可用)
用例子說(shuō)明:
在test1.cpp
#include<iostream>
using namespace std;
int global = 3; //靜態(tài)外部變量 能在外部文件中使用
static int s_global = 4;//靜態(tài)內(nèi)部變量只能在本文件中使用
extern void external_global(){ //靜態(tài)外部函數(shù)
cout << "func_external_global" << endl;
}
static void external_static(){ //靜態(tài)內(nèi)部函數(shù)
cout << "func_internal_static" <<endl;
}
在test2.cpp
#include<iostream>
using namespace std;
int main(){
extern int global ;//引用文件外的外部鏈接的變量。
cout << global << endl;
//extern int s_global;
//cout << s_global << endl; 這些都是不允許的因?yàn)閟_global 只能在test1.cpp中使用
extern void external_global();
extern void external_static(); //引用這些外部的函數(shù)。這里雖未報(bào)錯(cuò),但無(wú)法使用
external_global();
//external_static(); //因?yàn)槭庆o態(tài)的函數(shù)無(wú)法使用。
system("pause");
return 0;
}
下面順便添加個(gè)與此無(wú)關(guān)的。
2.Menu.h內(nèi)容如下:
#ifndef MENU_H
#define MENU_H
//int global=13
static global =13
int add(int a,int b);
int minus(int a, int b);
#endif
3.add.cpp內(nèi)容如下:
#include "Menu.h"
int add(int a, int b)
{
return a+b;
}
4.minus.cpp內(nèi)容如下:
#include "Menu.h"
int minus(int a,int b)
{
return a-b;
}
4.main.cpp內(nèi)容如下:
#include <iostream.h>
#include "Menu.h"
int main()
{
int a,b;
a=1;
b=2;
printf("%d",add(1,2));
printf("%d",minus(1,2));
return 0;
}
這種情況下代碼沒(méi)有問(wèn)題。
但是一旦你紅色代碼部分,不注釋就不可以用了。你必須將add.cpp 和 minus.cpp的#include"Menu.h" 去掉,這樣才可以防止重復(fù)被定義。因?yàn)檫@些.cpp文件會(huì)多次重新定義int global .會(huì)有多次include"Menu.h"
當(dāng)然你也可以把他定義為static
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。