请问,这是什么语法?

[复制链接]
查看11 | 回复10 | 2021-1-27 05:18:57 | 显示全部楼层 |阅读模式
template//----???
structintegral_constant{
staticconstexpr_Tyvalue=_Val;
usingvalue_type=_Ty;
usingtype=integral_constant;
constexproperatorvalue_type()constnoexcept{
returnvalue;
}
_NODISCARDconstexprvalue_typeoperator()()constnoexcept{
returnvalue;
}
};

class_Ty我理解是个类型,很多模板示例都用typename,但后面紧跟了个_Ty_Val是什么意思?
我知道模板参数可以是类型,也可以是指定类型,比如
template
但这里有不少限制,比如MaxLen不能是浮点数,不能是类类型
但像
template
到底是什么意思?

分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:18:57 | 显示全部楼层
带参数的模板,其中第二个模板参数的类型是_Ty,比如用int实例化integral_constant,就相当于integral_constant,用的时候得传一个编译期值进去,比如integral_constant,integral_constant这样
回复

使用道具 举报

千问 | 2021-1-27 05:18:57 | 显示全部楼层
Mark一下,没见过
回复

使用道具 举报

千问 | 2021-1-27 05:18:57 | 显示全部楼层
就如字面意思啊没有什么意思
回复

使用道具 举报

千问 | 2021-1-27 05:18:57 | 显示全部楼层
类模板不光可以用类型参数_Ty,还可以用变量做参数如_Val,变量参数主要用于定义某些初始值或函数参数的默认值。参见《C++程序设计精要教程》第13章。
回复

使用道具 举报

千问 | 2021-1-27 05:18:57 | 显示全部楼层
我懂了,意思就是像std::array的定义一样,声明时需要传一个_Ty类型的值过去

,哈哈,又学到一点新知识.
回复

使用道具 举报

千问 | 2021-1-27 05:18:57 | 显示全部楼层
有时间学习一下模板吧,如果工作中用不到,也可以暂时不了解,先把除模板以外的知识学好
回复

使用道具 举报

千问 | 2021-1-27 05:18:57 | 显示全部楼层
不能用于double,只能int或是其他常量,string也不行,指针可以,因为指针就是一个int数字。
回复

使用道具 举报

千问 | 2021-1-27 05:18:57 | 显示全部楼层
引用6楼ztenv的回复:有时间学习一下模板吧,如果工作中用不到,也可以暂时不了解,先把除模板以外的知识学好
正在学模板


这是微软版std::move()的源代码
回复

使用道具 举报

千问 | 2021-1-27 05:18:57 | 显示全部楼层
引用8楼加盾男爵的回复:Quote: 引用6楼ztenv的回复:有时间学习一下模板吧,如果工作中用不到,也可以暂时不了解,先把除模板以外的知识学好
正在学模板


这是微软版std::move()的源代码

std::move和微软没有关系,是C++标准委员会在C++11版本中引入的一个概念——移动语义。有时间看一下std::move的介绍吧,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行