It’s not standardised. Some use .tcc (t = template, cc = C++ source),some use .icc (i = included, cc = C++ source), some use .h (but that makes it indistinguishable from “real” headers), some just don’t use an extra file at all. It’s usually a file that contains implementations of templates declared in a header that then #includes the .tcc (or whatever) file. But as there is no standard nor a general consense about this, it could be anything else as well.It’s just an artifact of the need to have template definitions visible in all translation units that use them with most compilers:
example.hpp
#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP
template< typename T > void f();
#include "example.tcc"
#endif
example.tcc
#ifndef EXAMPLE_HPP
# error Don't include this file directly, include example.hpp instead
#endif
template< typename T > void f()
{
// stuff
}
非标准化的文件。就像经常使用的.tcc
(t = template, cc = C++ source),.icc
(i = included, cc = C++ source),.h
(没法从“真正”的头文件中区分开来),有些根本不用额外的文件。