声明字符串常量的方式,哪种更受推荐?
- 在文件范围内声明全局变量。
- 将其声明为类的全局变量。
该变量仅在类成员函数中使用。我倾向于认为第2种更好,因为它只与类成员函数相关。
A.cpp
---------------------
static const std::string hello_str = "Hello";
void A::print()
{
std::cout << hello_str;
}
(或者)
A.h
---------------------
class A{
public:
static const std::string hello_str;
void print();
}
A.cpp
---------------------
const std::string A::hello_str = "Hello";
void A::print()
{
std::cout << A::hello_str;
}
编辑 -1:
请允许我说,hello_str的内容可能会发生变化。例如,当开发者更改文件时,该字符串将手动更新。
在这种情况下,保持变量初始化在函数内是否有意义?用户更新字符串可能不太清晰 / 明显。如果将其保留为文件(1)或类(2)全局,则其他开发人员可以“识别”并修改此字符串。
鉴于上述用例,您仍然建议使用函数返回字符串吗?或者我可以使用具有私有访问说明符的类级静态变量?
static
可以被A.cpp中任何不在其之前的内容访问。如果A.cpp仅包含类A的定义,则它就是我所说的“有效私有”。静态变量的可见性和访问受到限制。这是C程序员用来保护他们的私有函数/数据的常用方法。例如:除非main()在A.cpp中定义,否则无法访问该静态变量。 - justinprint
被声明为private
,而foo
是公共的:class A { \n public: void foo(); \n private: \n void print(); \n };
- justin