У меня есть общая библиотека, которая экспортирует функцию, которая возвращает строку из глобальной переменной, например:
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;
}
Насколько я понимаю, это должно быть неопределенным поведением, поскольку переменная 'name' не обязательно инициализируется еще при создании объекта структуры, это правильно??Если это так, было бы правильно, если бы я переместил переменную name в "test_get_name"?:
const std::string &test_get_name()
{
static std::string name = "Test";
return name;
}