Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类外静态常量成员初始化_C++ - Fatal编程技术网

C++ 类外静态常量成员初始化

C++ 类外静态常量成员初始化,c++,C++,如何在类外初始化静态常量int成员 class C { public: C(); private: static const int a; static const std::string b; }; // const int C::a = 4; // i know it // const std::string C::b = "ba"; // this one too 我会使用C++17并使用inlin

如何在类外初始化静态常量int成员

class C
{

public:
    C();

private:
    static const int a;
    static const std::string b;

};

// const int C::a = 4;               //  i know it 
// const std::string  C::b = "ba";  //  this one too

我会使用
C++17
并使用
inline static
对象:

class C
{

public:
    C() = default;
private:
    inline static const int a = 42;
    inline static const std::string b{"foo"};

};

最简单、最干净、最可读。

我会选择
C++17
并使用
内联静态对象:

class C
{

public:
    C() = default;
private:
    inline static const int a = 42;
    inline static const std::string b{"foo"};

};

最简单、最干净、最可读。

这是如何在类之外初始化静态类成员:

C.cpp

#include <string>

class C {
public:
    C();

private:
    static const int a;
    static const std::string b;
};

C::C() = default;

const int C::a = 4;
const std::string C::b = "ba";
#包括
C类{
公众:
C();
私人:
静态常数INTA;
静态常量std::字符串b;
};
C::C()=默认值;
常数int C::a=4;
常量std::字符串C::b=“ba”;

除了在这个主题上的不同的各种C++方式之外,没有其他选项来初始化类的静态类成员。

< P>这是如何初始化类外的静态类成员:

C.cpp

#include <string>

class C {
public:
    C();

private:
    static const int a;
    static const std::string b;
};

C::C() = default;

const int C::a = 4;
const std::string C::b = "ba";
#包括
C类{
公众:
C();
私人:
静态常数INTA;
静态常量std::字符串b;
};
C::C()=默认值;
常数int C::a=4;
常量std::字符串C::b=“ba”;

没有其他选项可以在类之外初始化静态类成员,除了所有C++方式,对这个相同的主题进行初始化。< /P>什么是“<代码>静态<代码> >代码> const <代码>应用于同一个变量?@ LogICRAT,除非它被声明为<代码> const ,否则可以更改静态数据成员的值。您的问题究竟是什么?是否有一种初始化
b
的方法不起作用?您已经在注释掉的部分中这样做了,那么这种方法有什么问题?
如何在类外初始化static const int成员?
除此之外还有其他方法吗?
您已经演示了如何在类外初始化它们,你为什么要寻找另一种选择?你希望从另一个选项中得到什么,而这个选项在你的问题中是你无法做到的?您不喜欢已知变量的哪些方面?将
static
const
应用于同一变量有什么意义?@logical静态数据成员的值可以更改,除非声明为
const
。您的问题是什么?是否有一种初始化
b
的方法不起作用?您已经在注释掉的部分中这样做了,那么这种方法有什么问题?
如何在类外初始化static const int成员?
除此之外还有其他方法吗?
您已经演示了如何在类外初始化它们,你为什么要寻找另一种选择?你希望从另一个选项中得到什么,而这个选项在你的问题中是你无法做到的?你不喜欢你已经知道的一个吗?虽然我个人同意这可能是最干净的方法,但问题是
如何在类外初始化static const int成员?
并且这个不是在类外。也许这就是OP想要的,但是OP问错了问题。@t.niese请仔细阅读。我想让会员们下课。我可以这样做吗???@user12918858我在我的评论中没有说别的吗?@user12918858对我来说,这是一个:你问的是如何处理一个在现代C++中已经解决的问题:如果初始化可以(也应该)在声明的地方进行(在内部,使用
内联
),则无需在类外讨论初始化@Quarra以及如何从main初始化?虽然我个人认为这可能是最干净的方法,但问题是
如何在类外初始化static const int成员?
,并且该成员不在类外。也许这就是OP想要的,但是OP问错了问题。@t.niese请仔细阅读。我想让会员们下课。我可以这样做吗???@user12918858我在我的评论中没有说别的吗?@user12918858对我来说,这是一个:你问的是如何处理一个在现代C++中已经解决的问题:如果初始化可以(也应该)在声明的地方进行(在内部,使用
内联
),则无需在类外讨论初始化.@Quarra以及如何从main初始化?