gpt4 book ai didi

c++ - 不同翻译单元中的模板实例

转载 作者:行者123 更新时间:2023-11-30 05:45:26 25 4
gpt4 key购买 nike

<分区>

据我所知,每个模板在每个翻译单元上都有不同的实例,据我了解,翻译单元大致是一个 cpp 文件。

所以,如果我有一个名为 test.hpp 的文件,其中包含以下内容:

// test.hpp
template <typename T> void test()
{
static T t = T(0);
return t++;
}

对于每个翻译单元,我应该有一个不同的 test 实例,即使它们中的模板参数 T 是相同的。我决定对其进行测试,因此我创建了以下文件(为简洁起见,省略了包含守卫):

// a.hpp
namespace A { void f(); }

// a.cpp
#include <iostream>
#include "a.hpp"
#include "test.hpp"
namespace A
{
void f() { std::cout << test<int>(); }
}

// b.hpp
namespace B { void f(); }

// b.cpp
#include <iostream>
#include "b.hpp"
#include "test.hpp"
namespace B
{
void f() { std::cout << test<int>(); }
}

正如我们所见,a.cppb.cpp 都使用 test()< 的 int 实例 模板但在不同的翻译单元中,因此执行以下程序:

// main.cpp
#include "a.hpp"
#include "b.hpp"

int main()
{
A::f();
B::f();
return 0;
}

我期待的是 00 的输出,但我得到的却是 01。我用来测试此代码的 IDE 是 MSVC2010 V10.0.4 SP1。

那么问题是什么?

  • 我对模板和翻译单元的理解有误吗?或者……
  • 我在这个测试代码中做错了什么?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com