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

C++标准模板(STL)- 类型支持 (类型属性,检查类型是否拥有强结构相等性,std::has_strong_structural_equality)

类型特性


类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。

试图特化定义于 <type_traits> 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。

定义于<type_traits>头文件的模板可以用不完整类型实例化,除非另外有指定,尽管通常禁止以不完整类型实例化标准库模板。

类型属性

检查类型是否拥有强结构相等性

std::has_strong_structural_equality

template< class T >
struct has_strong_structural_equality;

(C++20 起)

T 拥有强结构相等性,则提供等于 true 的成员常量 value 。对于任何其他类型 value 为 false 。

模板形参

T-要检查的类型

辅助变量模板

template< class T >
inline constexpr bool has_strong_structural_equality_v = has_strong_structural_equality<T>::value;

(C++20 起)

继承自 std::integral_constant

成员常量

value

[静态]

T 拥有强结构相等性则为 true ,否则为 false
(公开静态成员常量)

成员函数

operator bool

转换对象为 bool ,返回 value
(公开成员函数)

operator()

(C++14)

返回 value
(公开成员函数)

成员类型

类型定义
value_typebool
typestd::integral_constant<bool, value>

注解

此类型特征可用于检查一个类型能否用作非类型模板形参。

调用示例

#include <type_traits>
#include <cstring>
#include <algorithm>
#include <iostream>namespace std
{
template<typename... Ts> struct make_void
{typedef void type;
};
template<typename... Ts> using void_t = typename make_void<Ts...>::type;template <typename T, typename = void>
struct has_strong_structural_equality : std::false_type {};template <typename T>
struct has_strong_structural_equality<T, std::void_t<decltype(std::declval<T>() == std::declval<T>())>> : std::true_type
{template<typename, typename>static std::false_type test(...);using type = decltype(test<T, T>(0));
};template<typename T, typename U>
using has_strong_structural_equality_t = typename has_strong_structural_equality<T, U>::type;template <typename T>
const bool has_strong_structural_equality_v = has_strong_structural_equality<T>::value;
}class E
{
public:template<class T> E(T&&) { }
};class A {};
class B : public A {};
class C {};
class D
{
public:operator C(){return c;}  C c;
};struct MyStruct
{int x;double y;
};// 自定义比较运算符
bool operator==(const MyStruct& lhs, const MyStruct& rhs)
{return lhs.x == rhs.x && lhs.y == rhs.y;
}int main()
{std::cout << std::boolalpha;std::cout << "std::has_strong_structural_equality<A>::value:       "<< std::has_strong_structural_equality<A>::value << std::endl;std::cout << "std::has_strong_structural_equality<E>::value:       "<< std::has_strong_structural_equality<E>::value << std::endl;std::cout << "std::has_strong_structural_equality<float>::value:   "<< std::has_strong_structural_equality<float>::value << std::endl;std::cout << "std::has_strong_structural_equality<int>::value:     "<< std::has_strong_structural_equality<int>::value << std::endl;std::cout << "std::has_strong_structural_equality<char>::value:    "<< std::has_strong_structural_equality<char>::value << std::endl;std::cout << "std::has_strong_structural_equality<bool>::value:    "<< std::has_strong_structural_equality<bool>::value << std::endl;std::cout << "std::has_strong_structural_equality<MyStruct>::value:"<< std::has_strong_structural_equality<MyStruct>::value << std::endl;std::cout << "-----------------------------------------------" << std::endl;std::cout << std::endl;return 0;
}

输出

std::has_strong_structural_equality<A>::value:       false
std::has_strong_structural_equality<E>::value:       false
std::has_strong_structural_equality<float>::value:   true
std::has_strong_structural_equality<int>::value:     true
std::has_strong_structural_equality<char>::value:    true
std::has_strong_structural_equality<bool>::value:    true
std::has_strong_structural_equality<MyStruct>::value:true
-----------------------------------------------

相关文章:

C++标准模板(STL)- 类型支持 (类型属性,检查类型是否拥有强结构相等性,std::has_strong_structural_equality)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…...

《中国数据库前世今生》观影——2000年代/数据库分型及国产数据库开端

引出 《中国数据库前世今生》观影——2000年代/数据库分型及国产数据库开端 第3集&#xff1a;2000年代/数据库分型及国产数据库开端 y2k问题 千年虫&#xff0c;又叫做“计算机2000年问题”“电脑千禧年千年虫问题”或“千年危机”。缩写为“Y2K]”。是指在某些使用了计算机…...

图的同态Graph Homomorphism与同构Graph Isomorphism

图的同态Graph Homomorphism 图的同态&#xff08;Graph Homomorphism&#xff09;是图论中的一个重要概念&#xff0c;用于描述图之间的一种映射关系。图的同态描述了一个图如何通过映射保留其边的结构。 ### 图的同态定义 设有两个图 \( G (V_G, E_G) \) 和 \( H (V_H, …...

使用 Python 对雷达卫星 sar 图像进行降噪的三种方法

合成孔径雷达 (SAR) 图像广泛应用于各种领域(航空航天、军事、气象等)。问题是这种图像在其原始格式中受到噪点的影响。虽然这些图像通常也是沉重的文件,但从科学的角度来看,有效地对其进行去噪的任务似乎既具有挑战性,又在现实世界中非常有用。 卫星图像有两大类: 光学…...

C# Unity 面向对象补全计划 之 初识继承方法与多态

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列旨在通过补全学习之后&#xff0c;给出任意类图都能实现并做到逻辑上严丝合缝 1.继承方法 C# & Unity 面向对象补全计划 之 继承&#xff08;字段与属性&…...

突破PyCharm索引瓶颈:提升文件索引速度的策略

突破PyCharm索引瓶颈&#xff1a;提升文件索引速度的策略 PyCharm作为Python开发者的首选IDE&#xff0c;以其强大的功能和灵活的配置而广受好评。然而&#xff0c;当处理大型项目或复杂文件结构时&#xff0c;文件索引慢的问题可能会显著降低开发效率。本文将提供一系列优化技…...

体素相关的快速计算

“体素”通常是指在三维空间中具有固定尺寸和位置的小立方体单元。 体素的优点包括&#xff1a; 易于处理和计算&#xff1a;在计算机图形学和三维建模中&#xff0c;体素的结构相对简单&#xff0c;计算和操作较为方便。能精确表示物体的内部结构&#xff1a;对于一些需要了…...

Python 爬虫项目实战(二):爬取微博热搜榜

前言 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;也称为网页蜘蛛&#xff08;Web Spider&#xff09;或网页机器人&#xff08;Web Bot&#xff09;&#xff0c;是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…...

文件解析漏洞复现

一、IIS 6.X 1.在网站目录创建文件夹名为xxx.asp/xxx.asa 文件夹&#xff0c;里面的任意文件都会被当作asp文件执行 创建1.asp 访问 2.ooo.asp.jpg会被当做asp文件执行 创建一个ooo.asp;.jpg 访问 二、IIS 7.X 上传1.jpg文件在网址后/.php可以成功执行 写一个1.jpg文件内容…...

git push报错 pre-receive hook declined

今天使用git提交的代码的时候&#xff0c;不然报错 pre-receive hook declined提交不上去&#xff0c;昨天还好好的。 经过检查发现&#xff0c;原来对应的分支被leader设置成受保护分支了&#xff0c;导致代码提交不上去。 然后在git管理平台取消分支保护&#xff0c;或者将我…...

打造个性化代码审查工具:在Perl中实现自定义审查的艺术

打造个性化代码审查工具&#xff1a;在Perl中实现自定义审查的艺术 代码审查是软件开发过程中的关键环节&#xff0c;它有助于提高代码质量和发现潜在缺陷。Perl作为一种灵活的编程语言&#xff0c;提供了丰富的特性&#xff0c;使得在Perl中实现自定义的代码审查工具成为可能…...

RabbitMq架构原理剖析及应用

文章目录 RabbitMQ 架构组件1. **Broker** (Broker Server)2. **Exchange**3. **Queue**4. **Producer** (消息生产者)5. **Consumer** (消息消费者)6. **Virtual Hosts** (虚拟主机) 工作流程内部原理1. **队列管理**2. **集群**3. **持久化与内存**4. **性能优化** 高级特性1…...

c# 对接第三方接口实现签名

官网文档要求如下&#xff1a; Sign算法说明 举例&#xff1a;假设请求参数键值对如下 appkey : test2-xx page_no : 0 end_time : 2016-08-01 13:00:00 start_time : 2016-08-01 12:00:00 page_size : 40 sid : test2 timestamp : 1470042310 第一步 对数所有请求参数按照…...

数学建模评价类模型—层次分析法(无数据情况下)

目录 前言 一、评价类问题概述 二、AHP建模流程 1、过程描述 2、层次分析法—Matlab代码 三、权重计算 1、算术平均法 2、几何平均法 3、特征值法 目录 文章目录 前言 一、评价类问题概述 二、AHP建模流程 1、过程描述 2、层次分析法—Matlab代码 三、权重计算 算术平均法 前言…...

模拟实现strcat(字符串追加)

1.我们要知道stcat的作用是什么&#xff0c;字符串追加。 2.我们进行模仿&#xff0c;我们先将arr1不断&#xff0c;直到“\0”,我们加在后面。 //模拟实现strcat(字符串追加) char* my_strcat(char* arr1, const char* arr2) {assert(arr1 && arr2);char ret arr1;…...

HTTP简单概述

一. HTTP HTTP&#xff08;HyperText Transfer Protocol&#xff09;是用于在客户端和服务器之间传输超文本数据&#xff08;如HTML&#xff09;的应用层协议。它是万维网的基础协议&#xff0c;定义了浏览器和服务器之间如何请求和传输文档。HTTP有多个版本&#xff0c;每个版…...

掌握PyCharm代码片段管理器:提升编码效率的秘诀

掌握PyCharm代码片段管理器&#xff1a;提升编码效率的秘诀 PyCharm作为业界领先的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了许多便利的功能来提升开发者的编码效率&#xff0c;其中之一就是代码片段管理器。代码片段管理器允许开发者保存、管理和重用代码模…...

MyBatis动态代理和映射器

目录 1、映射器简介 &#xff08;1&#xff09;什么是mapper动态代理&#xff1f; &#xff08;2&#xff09;动态代理的规范 &#xff08;3&#xff09;如何使用动态代理 &#xff08;4&#xff09;为什么学映射器 &#xff08;5&#xff09;映射器与接口 &#xff08;…...

ShardingSphere中的ShardingJDBC常见分片算法的实现

文章目录 ShardingJDBC快速入门修改雪花算法和分表策略核心概念分片算法简单INLINE分片算法STANDARD标准分片算法COMPLEX_INLINE复杂分片算法CLASS_BASED自定义分片算法HINT_INLINE强制分片算法 注意事项 ShardingJDBC Git地址 快速入门 现在我存在两个数据库&#xff0c;并…...

SpringBoot整合Flink CDC实时同步postgresql变更数据,基于WAL日志

SpringBoot整合Flink CDC实时同步postgresql变更数据&#xff0c;基于WAL日志 一、前言二、技术介绍&#xff08;Flink CDC&#xff09;1、Flink CDC2、Postgres CDC 三、准备工作四、代码示例五、总结 一、前言 在工作中经常会遇到要实时获取数据库&#xff08;postgresql、m…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...