【发布时间】:2017-05-15 20:12:05
【问题描述】:
我正在使用静态方法来初始化类的 const 字段。静态方法使用一些 const 变量,这些变量存储在单独的头文件中。原始类型正确地传递给静态方法,但 std::strings 被传递为空。我不明白为什么会这样。
在进行了一些搜索之后,我偶然发现了一种叫做静态初始化程序失败的东西,但是我很难理解它,并且无法确定是否应该归咎于它。由于对象在全局范围内,问题是在 std::string 类被“设置”之前它正在“设置”吗?
我试图复制下面的一个最小示例:
// File: settings.hpp
#include <string>
const std::string TERMINAL_STRING "Printing to the terminal";
const std::string FILE_STRING "Printing to a file";
// File: printer.hpp
#include <string>
#include <iostream>
class Printer
{
private:
const std::string welcomeMessage;
static std::string initWelcomeMessage(std::ostream&);
public:
Printer(std::ostream&);
}
extern Printer::print;
// File: printer.cpp
#include "settings.hpp"
std::string Printer::initWelcomeMessage(std::ostream &outStream)
{
if (&outStream == &std::cout)
{
return (TERMINAL_STRING);
}
else
{
return (FILE_STRING);
}
}
Printer::Printer(std::ostream &outStream) :
message(initWelcomeMessage(outStream)
{
outStream << welcomeMessage << std::endl;
return;
}
// File: main.cpp
#include "printer.hpp"
printer print(std::cout);
int main()
{
return (0);
}
非常感谢!
【问题讨论】:
标签: c++ class initialization c++14 static-initialization