为什么此代码有效(具有无效非模板函数的C++模板类)?

此 C++ 代码构建成功:

void h(int *)
{
}

template <typename T>
class A
{
public:
    void f()
    {
        T *val;
        
        h(val);
    }
};

int main()
{
    A<const int> a;
}

为什么?

不可否认,这A<const int>::f()行不通。

如果您调用a.f(),它将无法按预期构建。

那为什么A<const int>甚至允许存在一个实例呢?

我不确定 SFINAE 在这里如何适用。

我很感激 C++ 标准报价或相关链接。

回答

允许它存在是因为它的存在仍然是有用的。

考虑std::vector,它有一个单参数重载resize,默认构造新元素。绝对有用!但是std::vector,当您不打算以这种方式调整其大小时,拥有某种不可默认构造的类型也很有用。强制所有成员函数都可用,即使是用户不需要的函数,也会人为地限制类的适用性。

  • @eepp - In that case, your question is answered by the suggested duplicate https://stackoverflow.com/questions/23679525/why-are-some-functions-within-my-template-class-not-getting-compiled

以上是为什么此代码有效(具有无效非模板函数的C++模板类)?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>