【发布时间】:2019-07-08 23:34:52
【问题描述】:
我有一个 C++ 问题想问。
在标题中,我定义了一个结构如下:
struct ObjectType
{
const int id;
const std::string& value;
ObjectType(const int id, const std::string& value = ""):
id (id)
, value (value)
{
}
};
在匿名命名空间中,我定义了三个变量:
namespace {
const ObjectType sample1 (0, "sample1");
const ObjectType sample2 (1, "sample2");
const ObjectType sample3 (2, "sample3");
}
然后在我的单元测试中,当我尝试使用 ObjectType 时,该值始终为 NULL:
TEST(TestClass, test01)
{
std::cout << sample1.value << std::endl; // => This is always empty
}
我记得自从我将 struct 字段定义为 const 后,它应该会延长输入的生命周期。然后应该打印 sample1.value。但是它没有..任何人都知道它为什么会发生?谢谢!
【问题讨论】:
-
修复识别请。这让我很焦虑。
-
@Justin 我不认为将某些东西放在命名空间中会使它成为临时的
-
@Kosta 没错,命名空间级别的全局变量不是临时的。但是,为构造全局变量而构造的
std::strings 是临时变量。 -
@user4581301 此处使用的隐式转换与建议的 dup 中使用的显式转换之间的差异非常小。
标签: c++ struct constructor constants lifetime