现在的位置: 首页 > 综合 > 正文

C++中static变量的妙用

2013年09月03日 ⁄ 综合 ⁄ 共 1073字 ⁄ 字号 评论关闭

C++static变量的妙用

static是静态的意思。静态变量曾经被认为是危险的。比如,在许多平台上printf函数有警告,就是因为printf函数中使用了静态变量。

但是,static有着许多“鬼手”,吸引着众多程序探险家。

1、  如何使一段代码在一个线程里仅执行一次

方案一、

void func()

{

     static bool b=true;

     if(b)

     {

         std::cout << "Hello World!" << std::endl;//在一个线程里仅执行一次的代码段

         b=false;

     }

}

哈哈,功能实现了。真正高兴的事情在后面!

方案二、

unsigned char Hello()//在一个线程里仅执行一次的代码段(可以根据实际情况决定是否inline

{

     std::cout << "Hello World!" << std::endl;

     return 0;

}

void func()

{

     static unsigned char uc=Hello();

}

这样用static才高效,才酷!

2、  消除全局对象的依赖

全局对象的依赖问题一直困扰着C++程序。很多C++书籍会告诉你,“除非万不得已,不要使用全局对象。”但是,全局对象有着众多好处。下面让我们来用static解决部分问题吧。

方案一、

#include <iostream>

int &A(){static int result;return result;}

int main(int argc,char *argv[])

{

     A()=123456;

     std::cout << A() << std::endl;

}

    用起来就像一个全局变量,下面还有更好的办法。

方案二、

#include <iostream>

template <typename T,unsigned>

T & Static(){static T result;return result;}

#define STATIC(T,u) (Static<T,u>())

int main(int argc,char *argv[])

{

     STATIC(int,0) = 123;

     STATIC(int,1) = 456;

     std::cout << STATIC(int,0) << std::endl;

     std::cout << STATIC(int,1) << std::endl;

}

static和模板一起使用,才显得肚子里的知识多啊。O(_)O

    C++static的常规用法网上讲的很全,搜“C++ static”就可以了。

抱歉!评论已关闭.