gpt4 book ai didi

c++ - 在模板特化的情况下,是否允许编译器忽略内联?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:02 25 4
gpt4 key购买 nike

假设您有一个简单的模板函数(为了简单起见,不是类成员),在同一个 .h 文件中具有特定于类型的特化...

template <class TYPE>
void some_function(TYPE& val)
{
// some generic implementation
}

template <>
inline void some_function<int>(int& val)
{
// some int specific implementation
}

除非您明确指示编译器inline 特化(inline 关键字),否则如果 .h 文件被多次包含(至少我是这样),您将收到链接错误在 Visual C++ 2008 中)。
我们都知道inline只是给编译器的一个建议,它可以忽略。在这种特殊情况下,是否允许编译器忽略此建议并让链接器失败?

最佳答案

如果您不使用inline,那么同一个函数会通过extern 链接编译成多个.obj 文件,这会导致链接器抛出重复符号错误。

这与编译器是否实际上内联编译你的函数无关,因为它可以将它视为一个static函数,并使每个实现对每个编译单元都是私有(private)的.但是,您不能为此目的使用 static,因为它在成员函数上有其他含义,因此 inline 是您唯一的选择。

关于c++ - 在模板特化的情况下,是否允许编译器忽略内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1760291/

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