加载中……
C/C++ static关键字作用

作用

  1. 修饰普通变量:变量存储在静态区,初始化且仅初始化一次变量,默认值为0。
  2. 修饰普通函数:限定函数作用范围,使该函数只在本文件有效,防止与其他命名空间函数冲突。
  3. 修饰成员变量:该类只保存一个该变量,可以通过类直接访问,在类中声明,在类外初始化。可以通过类名直接访问,所有的类对象共用同一个该静态成员变量。
  4. 修饰成员函数:无需生成对象可以直接访问,static函数内不能访问非静态成员。

解析

修饰普通变量

代码

#include <iostream>
using namespace std;
void fun()
{
    static int a = 10;
    a++;
    cout<<a<<"\t";
}
int main()
{
    for(int i = 0; i < 5; i++)
    {
        fun();
    }
    return 0;
}

结果

11  12  13  14  15

结论

变量存储在静态区,初始化且仅初始化一次变量。

修饰普通函数

代码

static_test.h
#include <iostream>
void fun1();
static void fun2();
static_test.cpp
#include <iostream>
#include "static_test.h"
using namespace std;
void fun1()
{
    cout<<"fun1()"<<endl;
}
static void fun2()
{
    cout<<"fun2()"<<endl;
}

static_test2.cpp

#include <iostream>
#include "static_test.h"
 
int main()
{
    fun1();
    fun2();
    return 0;
}

结果

使用g++ -o static_test static_test2.cpp static_test.cpp编译报错,static_test2.cpp:(.text+0xa): undefined reference to `fun2()’

结论

fun2为静态函数,只能被定义的源文件访问,这样可以避免了函数重名的情况。

修饰成员变量

代码

#include <iostream>
using namespace std;
class Static_test
{
public:
    static int a;
    int b;
    void fun()
    {
        cout<<a<<"\t";
    }
};
int Static_test::a = 10;
int main()
{
    Static_test A;
    A.fun();
    cout<<Static_test::a<<"\t";
    return 0;
}

结果

10    10

总结

可以通过类名直接访问,所有的类对象共用同一个该静态成员变量。注意,静态成员变量不要在头文件中初始化,这样做会重复定义。在类中声明,在类外初始化。

修饰成员函数

代码

#include <iostream>
using namespace std;
class Static_test
{
public:
    static int a;
    int b;
    static void fun()
    {
        cout<<a<<endl;
    }
};
int Static_test::a = 10;
int main()
{
    Static_test::fun();
    return 0;
}

结果

10

结论

静态成员函数可直接被类访问,静态成员函数只能访问静态成员变量。

版权声明: 若无特殊说明,文章均为原创,版权归本文作者所有,转载请保留出处和此说明!
本文链接: C/C++ static关键字作用
本文作者: Jan.
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇