请问,这是什么语法?

加盾男爵 2020-11-05 04:47:15

template <class _Ty, _Ty _Val> //----???
struct integral_constant {
static constexpr _Ty value = _Val;

using value_type = _Ty;
using type = integral_constant;

constexpr operator value_type() const noexcept {
return value;
}

_NODISCARD constexpr value_type operator()() const noexcept {
return value;
}
};


class _Ty我理解是个类型,很多模板示例都用typename,但后面紧跟了个_Ty _Val是什么意思?
我知道模板参数可以是类型,也可以是指定类型,比如

template<typename T , int MaxLen>

但这里有不少限制,比如MaxLen不能是浮点数,不能是类类型
但像

template <class _Ty, _Ty _Val>

到底是什么意思?
...全文
349 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-09
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
ztenv 版主 2020-11-09
  • 打赏
  • 举报
回复
语法一样,内部实现可能不同
加盾男爵 2020-11-09
  • 打赏
  • 举报
回复
引用 9 楼 ztenv 的回复:
[quote=引用 8 楼 加盾男爵 的回复:][quote=引用 6 楼 ztenv 的回复:]有时间学习一下模板吧,如果工作中用不到,也可以暂时不了解,先把除模板以外的知识学好
正在学模板 这是微软版std::move()的源代码[/quote] std::move和微软没有关系,是C++标准委员会在C++11版本中引入的一个概念——移动语义。有时间看一下std::move的介绍吧,[/quote] 不同编译器的标准函数实现一样嘛?比如微软的std::move()和GUN的std::move()的,之前看STL的时候微软和GUN,同样的vector,list但他们的代码不一样的,虽然原理都一样
yshuise 2020-11-06
  • 打赏
  • 举报
回复
不能用于double,只能int或是其他常量,string也不行,指针可以,因为指针就是一个int数字。
ztenv 版主 2020-11-06
  • 打赏
  • 举报
回复
有时间学习一下模板吧,如果工作中用不到,也可以暂时不了解,先把除模板以外的知识学好
一叶小舟_郭 2020-11-06
  • 打赏
  • 举报
回复
我懂了,意思就是像std::array的定义一样,声明时需要传一个_Ty类型的值过去,哈哈,又学到一点新知识.
ztenv 版主 2020-11-06
  • 打赏
  • 举报
回复
去看一下我的这篇博客:https://blog.csdn.net/lianshaohua/article/details/108133034
ztenv 版主 2020-11-06
  • 打赏
  • 举报
回复
引用 8 楼 加盾男爵 的回复:
[quote=引用 6 楼 ztenv 的回复:]有时间学习一下模板吧,如果工作中用不到,也可以暂时不了解,先把除模板以外的知识学好
正在学模板 这是微软版std::move()的源代码[/quote] std::move和微软没有关系,是C++标准委员会在C++11版本中引入的一个概念——移动语义。有时间看一下std::move的介绍吧,
加盾男爵 2020-11-06
  • 打赏
  • 举报
回复
引用 6 楼 ztenv 的回复:
有时间学习一下模板吧,如果工作中用不到,也可以暂时不了解,先把除模板以外的知识学好
正在学模板 这是微软版std::move()的源代码
maguangzhi 2020-11-05
  • 打赏
  • 举报
回复
类模板不光可以用类型参数_Ty,还可以用变量做参数如_Val,变量参数主要用于定义某些初始值或函数参数的默认值。参见《C++程序设计精要教程》第13章。
大板牙花生 2020-11-05
  • 打赏
  • 举报
回复
就如字面意思啊 没有什么意思
一叶小舟_郭 2020-11-05
  • 打赏
  • 举报
回复
Mark一下,没见过
SleekStone 2020-11-05
  • 打赏
  • 举报
回复
带参数的模板,其中第二个模板参数的类型是_Ty,比如用int实例化integral_constant, 就相当于integral_constant<int, int _Val>,用的时候得传一个编译期值进去,比如integral_constant<int, 10>, integral_constant<double, 3.14>这样

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧