C++公共常量和全局变量
一、公共常量
很多时候我们要为程序定义一些公共常量。例如,可能在头文件的全局作用域以这种方式声明一些常量:
const int MAX_NAME_LENGTH=128;
const std::string LOG_FILENAME="filename.log"
这里需要注意的是,只有非常简单的内置类型常量才会被C++编译器内联。默认情况下,以这种方式定义的变量会促使编译器为每个包含该头文件的模块分配变量存储空间。如果定义了很多常量,并且头文件被很多.cpp文件包含,那么这会导致.o目标文件和最终二进制文件膨胀。解决办法是用extern声明常量:
extern const int MAX_NAME_LENGTH=128;
extern const std::string LOG_FILENAME="filename.log"
然后在相应的.cpp文件定义每个常量的值。通过这种方式,变量的空间就只会分配一次。这种做还有另外一个优势,就是在头文件中隐藏实际的常量值:毕竟它们属于实现细节。
更好的办法是在类中声明常量,并将其声明为静态的const。(这样它们就不会被计入每个对象的内存大小了。)
const int MAX_NAME_LENGTH=128;
const std::string LOG_FILENAME="filename.log"
这里需要注意的是,只有非常简单的内置类型常量才会被C++编译器内联。默认情况下,以这种方式定义的变量会促使编译器为每个包含该头文件的模块分配变量存储空间。如果定义了很多常量,并且头文件被很多.cpp文件包含,那么这会导致.o目标文件和最终二进制文件膨胀。解决办法是用extern声明常量:
extern const int MAX_NAME_LENGTH=128;
extern const std::string LOG_FILENAME="filename.log"
然后在相应的.cpp文件定义每个常量的值。通过这种方式,变量的空间就只会分配一次。这种做还有另外一个优势,就是在头文件中隐藏实际的常量值:毕竟它们属于实现细节。
更好的办法是在类中声明常量,并将其声明为静态的const。(这样它们就不会被计入每个对象的内存大小了。)
#ifndef GLOBALCONST_H #define GLOBALCONST_H #include <string> class GlobalConst { public: static const int MAX_NAME_LENGTH; static const std::string LOG_FILENAME; }; #endif // GLOBALCONST_H
globalconst.cpp
#include "globalconst.h" const int GlobalConst::MAX_NAME_LENGTH=128; const std::string GlobalConst::LOG_FILENAME="filename.log";
应用
qDebug()<<GlobalConst::MAX_NAME_LENGTH;
qDebug()<<QString::fromStdString(GlobalConst::LOG_FILENAME);
二、全部变量定义方法,静态函数的方法
#ifndef GLOBALVAR_H #define GLOBALVAR_H class GlobalVar { public: GlobalVar(); static void setSize(int size); static int getSize(); static void setScale(double scale); static double getScale(); private: static int size_; static double scale_; }; #endif // GLOBALVAR_H
静态变量必须要初始化。
#include "globalvar.h" //初始化 int GlobalVar::size_=0; double GlobalVar::scale_=0; GlobalVar::GlobalVar() { } void GlobalVar::setSize(int size) { size_=size; } int GlobalVar::getSize() { return size_; } void GlobalVar::setScale(double scale) { scale_=scale; } double GlobalVar::getScale() { return scale_; }
应用:
GlobalVar::setSize(90); qDebug()<<GlobalVar::getSize();

浙公网安备 33010602011771号