我的印象是类的静态成员在该类的所有实例之间共享它们的值。我的理解似乎缺乏,也许是因为包含模板或constexpr在这个例子中:
#include <iostream>
#include <array>
template <typename T, std::size_t maxSize>
class Foo
{
public:
unsigned int getLen() {
return containerLen;
}
private:
static constexpr std::size_t containerLen = maxSize + 1;
std::array<T, containerLen> arr;
};
int main()
{
Foo<int, 10> foo1;
std::cout << foo1.getLen() << std::endl;
Foo<int, 12> foo2;
std::cout << foo2.getLen() << std::endl;
std::cout << foo1.getLen() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
11
13
11
Run Code Online (Sandbox Code Playgroud)
我可能遗漏了一些明显的东西,但是是什么让每个实例Foo具有不同的值containerLen?
Foo<int, 10>并且Foo<int, 12>是不同的类——它们只是共享相同的模板。的所有实例都Foo<int, 10>将共享相同的内容containerLen,所有实例也是如此Foo<int, 12>;但是这两个类不会共享一个共同的值。