当前位置: 首页 > news >正文

公司网站页脚外包公司的业务员

公司网站页脚,外包公司的业务员,公司主页设计案例,做网络推广阿里巴巴还是网站好概念介绍 非类型模板参数&#xff08;Non-type template parameters&#xff09;&#xff0c;顾名思义在模板中这个参数不是表示一个类型&#xff0c;而是表示一个值&#xff0c;它必须是编译时常量。 基本语法如下所示&#xff1a; // 基本形式 template <type-name par…

概念介绍

非类型模板参数(Non-type template parameters),顾名思义在模板中这个参数不是表示一个类型,而是表示一个值,它必须是编译时常量。

基本语法如下所示:

// 基本形式
template <type-name parameter-name>
template <typename T, int N>  // N 是非类型模板参数

如上所示,T作为模板参数表示一个类型,而N作为一个模板参数,表示的并不是一个类型,而是一个数值。

template<T, int N>
class array{private:int buffer[N];....
}

从上面的例子可以看到非类型模板参数N作为一个数值,供模板参数使用。

非类型模板参数在c++98就已经引入了,只是我们平时的使用中可能对模板参数是一个类型这种形似见的比较多,所以对非类型模板参数有所忽略。

非类型模板参数随着版本的演进

随着版本的变化,非类型模板参数的特性不断丰富,总体来说就是早期版本非类型模板参数仅支持部分基本的数据类型,而随着版本的不断发展,支持的数据类型越来越多,甚至到了c++20版本已经支持将自定义的类类型作为非类型模板参数传入。

c++98版本

在早期版本仅支持整型、枚举类型、指针、引用、成员函数指针作为非类型模板参数。

//基本数据类型
template<int N>
struct array{int data[N];
}//指针和引用
template<int* p>
struct pointer
{//使用P
}//枚举类型
enum Color{RED, GREEN, BLACK};
template<Color C>
struct ColorHolder{//内部使用C
}

c++11版本

引入了nullptr和constexpr的支持

template <int* P = nullptr>
struct Pointer {};constexpr int getValue() { return 42; }
template <int N = getValue()>
struct Value {};

c++14变量模板支持

template <int N>
constexpr int value = N;static_assert(value<42> == 42);

可以看到支持对一个变量设置模板参数。

c++17版本带来的变化

c++17相对于之前的版本引入了一个很重要的改进,即在定义模板时,对于非类型模板参数来说无需使用显式的类型来声明非类型模板参数,而是可以使用auto关键即可。请看下面的例子:

// 自动推导类型
template <auto N>
struct Value {using type = decltype(N);static constexpr auto value = N;
};Value<42> v1;    // int
Value<'c'> v2;   // char
Value<true> v3;  // bool

请看上面的例子,在c++17之前在声明时不能使用auto关键字,而是必须显式的将非类型模板参数的类型声明出来,下面在看一个更具体的例子:

//c++17之前
// 使用auto作为非类型模板参数
template <int N>
class Array {int data[N];  // N的类型会被自动推导
};Array<42> arr1;    // N 被推导为 int
Array<'c'> arr2;   // 错误,与声明不一致//c++17之后
// 使用auto作为非类型模板参数
template <auto N>
class Array {int data[N];  // N的类型会被自动推导
};Array<42> arr1;    // N 被推导为 int
Array<'c'> arr2;   // N 被推导为 char

c++20版本

这个版本对于非类型模板参数也是一个重大的改进,在该本支持了将类类型和浮点类型。在这之前非类型模板参数是不支持类类型和浮点数类型的。请看下面的例子:

class Point
{private:int x;int y;
}
//c++20之前
template<Point p>  //错误,不支持类类型,浮点数同理
struct PointTemplate 
{static constexpr Point value = p;
}//c++20之后
template <Point p>
struct PointTemplate {static constexpr Point value = p;
};static constexpr Point origin{0, 0};
PointTemplate<origin> pt;

注意事项

无论版本如何演进,非类型模板参数,都必须是在编译时确定非类型模板参数的数值的,不能在运行时通过变量的方式确定非类型模板参数的值。请看下面的例子:

template<int N>
struct Array
{int buffer[N];
}int var = 10;
Array<var> a1;  //编译错误,必须在编译时确定该值
Array<10> a2;  //编译正确,在编译时非类型模板参数的数值已经确定constexpr int var1 = 20;
Array<var1> a3;   //编译正确,因为constexpr修饰的变量就是在编译阶段生效的。
http://www.dtcms.com/a/490763.html

相关文章:

  • [crackme]028-ArturDents-CrackMe#3
  • 黑盒测试与白盒测试
  • 为安防装上“智慧大脑”:解密视频融合平台EasyCVR的智能分析技术内核
  • 同一设备多账号登录,如何避免消息推送“串门”?
  • 【Linux】认识Framebuffer
  • 深圳做网站公司有哪些公司英文购物网站模板下载
  • 力扣热题100道之560和位K的子数组
  • Pixel-Perfect Depth with Semantics-Prompted Diffusion Transformers,nips 2025
  • 网站可以换主机吗做外贸网站 用国外空间 还是 国内空间 区别
  • **SLAM技术:探索现代定位与地图构建的新纪元**在现代科技领域,同步定位与地图构建(SLAM)技术已成为机器人导航和自动驾驶等领
  • 环保教育展厅建设方案-VR垃圾分类体验游戏-垃圾分类拍拍乐
  • 网站空间怎么更换莱芜在线论坛最新消息
  • 龙岩做网站哪家好如何绑定网站域名
  • [Linux系统编程——Lesson14.基础IO:系统文件IO]
  • golang的一些技巧
  • 高性能 Go 语言带 TTL 的内存缓存实现:精确过期、自动刷新、并发安全
  • ML.NET机器学习框架基本流程介绍
  • Day32_【 NLP _2.RNN及其变体 _(2) LSTM】
  • 重庆建站模板代理怎么做p2p网站
  • iis配置网站是什么网站建设方案书阿里云模板
  • 【计算机视觉】SAM 3 技术深潜:从“分割万物”到“理解概念”的范式转移
  • 「深度学习笔记3」概率论深度解析:从不确定性到人工智能的桥梁
  • 齐河专业企业网站建设做网站引流到天猫
  • 技术贴!【谷歌浏览器】实用工具推荐之谷歌浏览器(Google Chrome)离线纯净版完全安装指南:告别广告与捆绑骚扰
  • Centos7 自建Umami-开源免费的网站访问流量统计分析平台
  • 申威架构安装Java 11 RPM包教程:java-11.0.7-swjdk-11u-8.ky10.sw_64.rpm详细安装步骤
  • 【STM32项目开源】基于STM32的人体健康监测系统
  • 一个做礼品的网站国外网站用什么dns
  • 东莞 网站建设网站定制制作公司
  • Python 线程 类比c++【python】