我有一个共享库,它导出一个从全局变量返回字符串的函数,如下所示:
测试.h:
const std::string &test_get_name();
测试.cpp:
static std::string name = "Test";
const std::string &test_get_name() {return name;}
在我的主程序(链接到共享库)中,我定义了一个全局变量(如果它是静态的,它是否仍称为“全局”变量?)它使用该函数来初始化一个对象:
主.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;
}