首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++核心准则T.10:为所有的模板参数定义概念

石竹 T.10: Specify concepts for all template arguments T.10:为所有的模板参数定义概念 Reason(原因) Correctness and readability...一个模板参数的假定含义(语法和语义)是模板接口的基础。概念大幅度改善了模板的文档化和错误处理。为模板参数定义概念是一个强有力的设计工具。...直接的类型名(或auto)是最小约束的概念。它应该被极少使用,仅限于表现“它是一个类型”。这通常只在我们操作纯表达式树,延迟类型检查时有(作为模板元编程的一部分)存在的必要。...+PL4, Palo Alto TR, Sutton Enforcement(实施建议) Flag template type arguments without concepts 标记没有使用概念的模板类型参数...原文链接 https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#t10-specify-concepts-for-all-template-arguments

58110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++11新关键字

    在decltype出现之前,很多编译器厂商都实现了自己的C++扩展特性用于类型推导,比如GCC的typeof操作符。...int* p1 = NULL; //或 int* p2 = nullptr; 在使用nullptr_t与nullptr时,注意以下几点: (1)可以使用nullptr_t定义空指针,但所有定义为nullptr_t...类型的对象行为上是完全一致的; (2)nullptr_t类型对象可以隐式转换为任意一个指针类型; (3)nullptr_t类型对象不能转换为非指针类型,即使使用reinterpret_cast进行强制类型转换也不行...; (4)nullptr_t类型对象不能用于算术运算表达式; (5)nullptr_t类型对象可以用于关系运算表达式,但仅能与nullptr_t类型或指针类型对象进行比较,当且仅当关系运算符为==、...(3)在模板特例化中,也可以用 delete 来过滤一些特定的形参类型。例如,Widget 类中声明了一个函数模板,当进行模板特化时,要求禁止参数为 void* 的函数调用。

    3.1K10

    【Kotlin】扩展函数 ② ( 扩展属性 | 为可空类型定义扩展函数 | 使用 infix 关键字修饰单个参数扩展函数的简略写法 )

    文章目录 一、扩展属性 二、可空类扩展 三、使用 infix 关键字修饰单个参数扩展函数的简略写法 一、扩展属性 ---- 上一篇博客 【Kotlin】扩展函数 ( 扩展函数简介 | 为 Any 超类定义扩展函数...语法格式为 : val 现有类类名.扩展属性名: 扩展属性类型 get() = {} var 现有类类名.扩展属性名: 扩展属性类型 get() = {} set() = {} 扩展属性...---- 之前讲的定义扩展函数 , 扩展属性 , 都是为 非空类型 定义的 , 如果要为 可空类型 定义扩展函数 , 则需要在 扩展函数 中 处理时 , 要多考虑一层 接收者 this 为空 的 情况...; 注意下面的调用细节 : 如果定义的 扩展函数 是 为 非空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时使用 " ?....非空类型扩展函数 如果定义的 扩展函数 是为 可空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时直接使用 " . " 进行调用即可 ; 可空类型实例对象.可空类型扩展函数 代码示例

    1.9K30

    视频高清直播RTMP视频推流组件EasyRTMP-IOS版如何使用wchar_t*类型参数?

    wchar_t是C/C++的字符类型,是一种扩展的存储方式。wchar_t类型主要用在国际化程序的实现中,但它不等同于unicode编码。unicode编码的字符一般以wchar_t类型存储。...在我们的SDK开发中,偶尔会用wchar_t*类型的参数。...最近TSINGSEE青犀视频研发人员在EasyRTMP推流组件iOS版本中接入freetype2库,来实现水印的功能,其中显示中文的时候,直接使用char * 就会造成FT_Get_Char_Index...方法找不到汉字的字形索引,需要wchar_t*类型的参数。...分析问题 wchar_t:宽字节字符。 在C++中,它是一个特有的基本类型(因此它并没有在或其他header中被定义)。在C中,这是一个整数类型的typedef。

    1.1K40

    【C++模板】——C++模板的力量:构建灵活与安全的代码

    非类型模板参数的类型可以是整型、指针、引用、布尔类型以及std::nullptr_t。 非类型模板参数允许我们根据具体的值来实例化模板。...使用示例: MyArray intArray; // 使用大小为10的数组 MyArray doubleArray; // 使用大小为20的数组 非类型模板参数的类型限制...std::nullptr_t:表示空指针值(nullptr)。 自从C++20起,非类型模板参数的类型限制有所放宽,可以使用浮点数和类类型的常量表达式。...可以理解为,它允许我们为特定参数类型或类型组合提供不同的实现,而无需完全指定所有模板参数。...术语解释: 偏特化(Partial Specialization):特指类模板或结构模板在未指定所有参数的情况下,为某些特定类型或类型组合提供定制实现。

    8510

    关于nullptr这篇文章你一定要看

    这里可以总结三点: 1、使用nullptr可以不用担心整型和指针类型的重载,不会产生二义性导致编译失败。 2、0和空指针分别表示不同的含义,使用nullptr可以更好的支持模板编程。...看下它可能的实现吧: struct nullptr_t { void operator&() const = delete; // Can't take address of nullptr...C, class T> inline operator T C::*() const { return 0; } }; nullptr_t nullptr;...nullptr是有类型的: typdef decltype(nullptr) nullptr_t; 当空指针用nullptr表示时,空指针就终于有类型了,当有异常需要抛出时,就可以抛出nullptr。...throw nullptr; } catch(nullptr_t) { ... } } 之后使用它的类型nullptr_t捕获,这里如果throw NULL,那用什么类型去

    57530

    c++智能指针的理解与简易实现

    智能指针利用c++ RAII的特性和模板化编程,本质上是一个包装类,使用起来像普通指针一样方便。当最后一个引用动态对象的智能指针离开作用域或不在引用动态对象后对其进行清理。...于是顺势就引出了所有权问题,当一个动态对象只会被一个指针引用时为独占所有权,被多个指针引用时为共享所有权。独占所有权的指针在释放时直接删除对象,共享所有权的指针则在最后一个指针释放时删除对象。...(std::nullptr_t) {} explicit unique_ptr(T* t) { // 单参构造函数通过explicit禁止隐式转换 _p = t; }...unique_ptr(std::nullptr_t) {} explicit unique_ptr(T* t) { _p = t; } unique_ptr(...shared_ptr引用计数是线程安全的,但是不保证引用对象的多线程安全,需要参数类型自行处理。

    76800

    【笔记】《深入理解C++11》(下)

    模板类型后面的三个点...称为模板参数包, 模板参数包也可以是特化的 推导后的模板参数包再通过参数名称后的三个点...来进行解包(包扩展) 变长模板自然也可以用在函数模板中, 称为函数参数包....模板参数列表 通用属性列表 lambda捕捉列表 理解包扩展的核心是谨记其将...前面的直接成员进行多次使用 C++11还引入了sizeof...()操作符来计算参数包中的参数数量, 返回一个size_t...// 当前参数列表的第一个参数作为类型T被捕获, 后面的留作递归 templateT, typename......, 但总是定义了从std::atomicT>到T的转换方便使用 各种不同的原子类型定义了不同的操作, 其中绝大多数原子类型都支持load(), store()和exchange()三大成员函数, 这三种操作在其赋值操作符中广泛使用...nullptr nullptr是"指针空值类型"的编译期常量关键字, 该类型命名为nullptr_t, 即typedef decltype(nullptr) nullptr_t; 这是为了能给这个特殊的类型进行操作符重载

    1.1K31

    Modern c++快速浅析

    模板类型推导 模板类型推导中最重要的是弄清它什么时候会抛弃引用,什么时候会抛弃常量性 •templateT> void func(T& param);在这个示例函数中,如果传递进是一个...,则推导出T•若表达式的值类型为左值:若表达式只是变量名,则推导出T;其他情况推导出T&•若表达式的值类型为将亡值,则推导出T&&•当decltype处理Lambda表达式时auto f = [](int...// 定义一个类型与参数的模板参数相同的变量data std::cout << typeid(data).name() << std::endl; } int main() { MyClass...constexpr constexpr代表编译期常量,它所标识的值可能被放入到只读内存段中,如数组,非类型模板参数,枚举类型等要求的都是编译期常量,const代表运行期常量。...的原因是:C++中不允许void*指针隐式转换为其他指针类型,即下面代码是非法的 int* p = (void*)0; nullptr是C++11中的一个关键字,它的类型是std::nullptr_t

    20410

    C++判断类型的模板

    介绍一些判断类型的模板。   下列模板中包 含于头文件(C++11起引入)。...检查类型是否为void is_void 检查类型是否为std::nullptr_t   C++14起引入。...is_null_pointer 检查类型是否为整数类型 is_integral 检查类型是否为浮点类型 is_floating_point 检查类型是否为数组类型 is_array 检查类型是否为枚举类型...is_enum 检查类型是否为联合类型 is_union 检查类型是否为非联合的类的类型 is_class 检查类型是否为函数类型 is_function 检查类型是否为指针类型 is_pointer...检查类型是否为左值引用 is_lvalue_reference 检查类型是否为右值引用 is_rvalue_reference 检查类型是否为指向非静态成员对象的指针 is_member_object_pointer

    3.6K30

    C++11——引入的新关键字

    2.1decltype推导规则 (1)如果e是一个变量或者类成员访问表达式,假设e的类型是T,那么的decltype(e)为T,decltype((e))为T&。...using size_t = decltype(sizeof(0));//sizeof(a)的返回值为size_t类型 using ptrdiff_t = decltype((int*)0 - (int...关键字nullptr是std::nullptr_t类型的值,用来指代空指针。...7.sizeof…运算符 sizeof…运算符的作用是获取C++11中可变参数模板中参数包中元素个数。类似sizeof,sizeof…返回一个常量表达式,而且不会对模板的实参求值[7]^{[7]}。...(3)在模板特例化中,也可以用 delete 来过滤一些特定的形参类型。例如,Widget 类中声明了一个函数模板,当进行模板特化时,要求禁止参数为 void* 的函数调用。

    1.5K50

    【C++指南】C++中nullptr的深入解析

    然而,这种表示方式存在一些问题: 类型不匹配:由于NULL可以被隐式转换为任何指针类型,同时也可能被解释为整数0,这可能导致类型混淆和难以发现的错误。...重载歧义:在函数重载时,如果两个函数分别接受整数和指针类型的参数,而NULL被错误地传递给整数参数的函数,这种错误在编译时不会被捕获。...二、nullptr的特点 1.类型安全 nullptr的类型是std::nullptr_t,这是一个特殊的类型,专门用于表示空指针。...std::unique_ptr uptr = nullptr; std::shared_ptr sptr = nullptr; 4.模板代码中的使用 在模板代码中,nullptr...NULL:可以被隐式转换为任何指针类型,也可以被解释为整数0,存在类型不匹配的风险。

    14610
    领券