【发布时间】:2022-06-15 08:46:31
【问题描述】:
在我正在做的一个项目中,我使用“extern”来使用一些全局变量,以便所有文件都可以访问它们。
以下是我的情况:
main.cpp:
#include <iostream>
#include "test.h"
std::string val2 = val;
int main()
{
std::cout << val2 << std::endl;
}
test.h:
#pragma once
#include <string>
extern std::string val;
test.cpp:
#include "test.h"
std::string val = "Hello World";
我期望得到的输出是“Hello World”,但它只会打印一个新行。
如果我使用内置类型(如 int)而不是 std::string,它将按预期工作。
据我了解,当我们尝试将其分配给val2 时,val 尚未初始化,因此我们最终什么都不复制,然后(可能)val 被初始化为该值Hello World,但由于我们正在打印 val2,我们只得到新行。
所以我的问题是,如何强制 val 先初始化。
如果这不可能,我如何制作全局变量(可以在多个文件之间使用)
注意:这些不是我的真实文件,但我检查过,问题也出现在这里,我认为这算作一个最小代码示例(或任何它是叫)
【问题讨论】:
-
现在无法获得链接,但是:静态初始化订单惨败。
标签: c++ initialization global extern