C++ 在C++;
我需要在C++ 在C++;,c++,c++11,static,constants,C++,C++11,Static,Constants,我需要在cpp文件中使用一些常量值,它与类相关,不会在类之外使用 我想出了几种方法: 方法1:static const在.cpp文件中 我相信与C++11中的前一个方法相比,此方法是声明此类作用域常量的首选方法。 再说一次,如果我错了,请纠正我 方法3:static const在.h文件中 或者像这样:constinta{100}。我认为吊舱类型没有区别。 再一次,如果我错了,请纠正我 方法5:初始值设定项列表 类 { 公众: Class():a(100){}/对于普通的全局变量,const确实
cpp
文件中使用一些常量值,它与类相关,不会在类之外使用
我想出了几种方法:
方法1:static const
在.cpp
文件中
我相信与C++11中的前一个方法相比,此方法是声明此类作用域常量的首选方法。再说一次,如果我错了,请纠正我 方法3:
static const
在.h
文件中
或者像这样:constinta{100}
。我认为吊舱类型没有区别。再一次,如果我错了,请纠正我 方法5:初始值设定项列表
类
{
公众:
Class():a(100){}/对于普通的全局变量,const
确实意味着static
(但请注意,const char*f;
不是const),因此#1有或没有static
实际上是相同的。(这实际上是一个错误的特性,在变量具有这些特性之前的许多年,它被作为constexpr inline
的一个模拟来包含。)#2也是相同的(只在类也可以在匿名命名空间中声明,但不能声明为静态
)
对于派生类来说,它们本质上并不坏:它们将常量限制在源文件中,源文件可以为任意数量的类定义方法。您也可以将它们放在.hpp
文件中,尽管首选类成员是合理的
对于#3,请注意,变量不需要在类定义中进行初始化。这样做可以在包含标头的每个文件中的常量表达式中使用它,在这种情况下,现代样式(支持非整数变量)将使用constexpr
<p>4和5为每个类对象添加一个成员,最好避免考虑它们禁用默认<强>赋值< /强>运算符。在4和5中,类的大小至少增加<代码> sieSof(int)。
。我认为#3最适合您的用例。但在我看来,让它成为静态constexpr会更好。使用最适合您当前情况的(#2)并在将来需要时进行更改。没有“理想的现在、永远和永远”除了真正琐碎的问题之外,任何问题的解决方案。是否允许子类更改此常量的值?#1和#2是相同的,不能被视为“类范围”-可以从同一文件中的任何位置访问它。
static const int a = 100; // <<<
int Class::foo() const
{
return a + 10;
}
int Class::bar() const
{
return a - 10;
}
namespace
{
const int a = 100;
}
class Class
{
public:
int foo() const;
int bar() const;
protected:
static const int a = 100; // <<<
};
class Class
{
public:
int foo() const;
int bar() const;
protected:
const int a = 100; // <<<
};
class Class
{
public:
Class() : a(100) {} // <<<
int foo() const;
int bar() const;
protected:
const int a;
};