【发布时间】:2018-06-05 07:20:15
【问题描述】:
我有一个共享库,它导出一个从全局变量返回字符串的函数,如下所示:
test.h:
const std::string &test_get_name();
test.cpp:
static std::string name = "Test";
const std::string &test_get_name() {return name;}
在我的主程序(链接到共享库)中,我定义了一个全局变量(如果它是静态的,它是否仍称为“全局”变量?),它使用该函数来初始化一个对象:
main.cpp:
#include "test.h"
#include <iostream>
struct TestStruct
{
std::string value;
};
static TestStruct v{test_get_name()};
int main(int argc,char *argv[])
{
std::cout<<v.value<<std::endl;
return 0;
}
据我了解,这应该是未定义的行为,因为在创建 struct 对象时,变量“name”不一定已初始化,对吗?如果是这样,如果我在“test_get_name”中移动“name”变量是否有效?:
const std::string &test_get_name()
{
static std::string name = "Test";
return name;
}
【问题讨论】:
-
这个结构更好的名字是单例。
标签: c++ global-variables compilationunit