gpt4 book ai didi

c++ - 声明模板时是否需要typename/class

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

当声明模板参数时 typename/class 是必需的(因为在语言中不能使用 diff 语法,我在下面建议)。我知道模板参数可以是整数,所以你必须选择默认为 int 或 typename/class 但仍然。

即为什么不

template <T>
T max(T a, T b) {
return a > b ? a : b;
}

代替

template <typename T>
T max(T a, T b) {
return a > b ? a : b;
}

template<T, size_t n>
size_t array_size(const T (&)[n]) {
return n;
}

代替

template<typename T, size_t n>
size_t array_size(const T (&)[n]) {
return n;
}

最佳答案

如果模板参数默认为类型,该语言当然仍然可以工作;就像 C 过去在没有类型说明符的情况下变量类型默认为 int 时一样。会有一些歧义需要克服,例如:

typedef int T;
template <T> class C; // type, or non-type value of type `T`?

但是,强制您明确说明可以更好地进行诊断。如果我忘记指定非类型参数的类型,那么编译器可以立即发现错误并告诉我。在你的世界里,它会假设我想要一个类型参数,并继续尝试相应地解释模板;可能会产生令人困惑的错误,或者甚至可能成功地编译了一些完全错误的东西。

我无法评论这是否是这里不允许默认值的原因(或者从 C 中删除默认变量类型,或者从不允许在 C++ 中使用它们),但这对我来说肯定是一个足够好的理由。

关于c++ - 声明模板时是否需要typename/class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14589803/

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