gpt4 book ai didi

c++ - 模板的静态成员是全局唯一的吗?

转载 作者:太空狗 更新时间:2023-10-29 20:43:16 26 4
gpt4 key购买 nike

看看现在可用的答案,我仍然不确定答案是什么。这是我的例子

// foo.h
template <class T> class foo
{
public:
static T t;
};
template <class T> T foo<T>::t = 0;

// a.cpp
#include "foo.h"
foo<int> fa;

// b.cpp
#include "foo.h"
foo<int> fb;

// c.cpp
#include "foo.h"
foo<int> fc;

int main (int argc, char* argv[])
{
fc.t = 5;
}

这是否意味着 fa.t 和 fb.t 也是 5?如果语法不正确,请告诉我。

最佳答案

Does that mean fa.t and fb.t are also 5?

是的,static数据成员由一个类的所有实例共享,并且自 fa , fb , 和 fc都是同一个类的实例foo<int> , 他们分享 static数据成员。

您的对象类型是模板实例这一事实与此无关,您的对象在不同的​​翻译单元中实例化也与此无关。正如 C++11 标准第 9.4/5 段所规定的那样:

Static data members of a class in namespace scope have external linkage (3.5). A local class shall not have static data members.

换句话说,这个片段:

#include <iostream>

int main ()
{
fc.t = 5;
std::cout << fa.t;
}

将打印 5到标准输出。这是一个 live example .

关于c++ - 模板的静态成员是全局唯一的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15817975/

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