在查看stl源代码的时候,会发现std::is_trivial也是利用了__is_trivial,但是在STL查找,却没追踪到__is_trivial的定义,何解?百度了半天,也没发现谁准确地讨论了__is_trivial,全部都在围绕is_trivial讨论,很默契地避开了__is_trivial。几经周折,我在一个网站发现了端倪,https://manishearth.github.io/blog/2017/01/11/rust-tidbits-what-is-a-lang-item/

其中有这样一句话:“the compilers seem to implement them using intrinsics like __is_trivial<T> which aren’t defined in C++ code at all.”原来是编译器自己执行了操作,也就是说,编译器在编译源码的时候,如果遇见__is_trivial<T>,则检查T是否满足某种要求(是否符合trivial规则),如果是则替换成true,否则替换成false。

这个过程很像if else,但不同的是,这个操作发生程序生成阶段,而不是程序运行阶段,Magic!

因为编译器的进步,STL也进行了更新,在早些时候(至少在侯捷先生编写《STL源码剖析》之前),STL一系列的和__type_traits相关的源码如has_trivial_copy_constructor,全部手动进行定义成__true_type、__false_type。而随着编译器对__is_trivial系列的支持,STL底层也借助了__is_trivial来进行推导。

has_trivial...等一系列的名字在新版本中,也变成了is_trivial...,参考网址:Adjustments to constructor and assignment traits

STL中的__is_trivial定义在哪里?相关推荐

  1. STL中的nth_element()方法的使用

    STL中的nth_element()方法的使用 通过调用nth_element(start, start+n, end) 方法可以使第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),并且比 ...

  2. hdu1027 Ignatius and the Princess II (全排列 amp; STL中的神器)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1027 Ignatiu ...

  3. C++STL中的unique函数解析

    一.总述 unique函数属于STL中比较常用函数,它的功能是元素去重.即"删除"序列中所有相邻的重复元素(只保留一个).此处的删除,并不是真的删除,而是指重复元素的位置被不重复的 ...

  4. C++ STL中的优先队列(priority_queue)使用

    原文:https://www.cnblogs.com/cielosun/p/5654595.html 今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中 ...

  5. STL中的双向队列deque

    1.STL中的双向队列deque deque也是顺序容器的一种,同时也是一个可变长数组.要使用deque,需要包含头文件deque.所有适用于vector的操作都适用于deque. deque和vec ...

  6. C++中STL中的大、小、相等概念

    1.STL的大.小.相等概念 STL中关联容器内部的元素是排序的.STL中的许多算法也涉及排序.查找.这些容器和算法都需要对元素进行比较,有的比较是否相等,有的比较元素大小. 在STL中,默认情况下, ...

  7. STL中基本容器有: string、vector、list、deque、set、map

    为什么80%的码农都做不了架构师?>>>    在STL中基本容器有: string.vector.list.deque.set.map set 和map都是无序的保存元素,只能通过 ...

  8. 关于STL中的map和hash_map

    在网上看到有关STL中hash_map的文章,以及一些其他关于STL map和hash_map的资料,总结笔记如下:     1.STL的map底层是用红黑树实现的,查找时间复杂度是log(n):   ...

  9. STL中的list详解

    STL中的list就是一双向链表,可高效地进行插入删除元素. list不支持随机访问.所以没有 at(pos)和operator[]. list对象list1, list2分别有元素list1(1,2 ...

最新文章

  1. LLVM官方文档翻译---- LLVM原子指令与并发指引
  2. 突发!贝壳董事长左晖因疾病意外去世
  3. 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫
  4. 过防火墙一句话php2017,dedeCMS友情链接getshell漏洞利用
  5. CentOS 6快捷安装RabbitMQ教程
  6. 轻松部署IE7(下),SMS2003系列之六
  7. ajax ★ ★ ★ ★ ★
  8. java 注解scheduler_JAVA注解@Scheduled 不执行
  9. 面试稳了!BATJ 等大厂 400+ 道面试题全汇总!
  10. db2 mysql oracle,五大主流数据库比较 DB2 Oracle MySQL SyBase SQLServer)
  11. 理顺 JavaScript (7) - 数字相关问题
  12. docker 私服搭建以及镜像部署
  13. 什么是迁移学习 (Transfer Learning)?这个领域历史发展前景如何?【文末彩蛋】...
  14. [yum] yum加速
  15. (转)在NGUI使用图片文字(数字、美术字)(直接可用于UILable)
  16. linux内核 quota,Linux系统磁盘配额(quota)
  17. 搜狗输入法 rpm包_你以为搜狗输入法只能用来打字吗?
  18. 计算机辅助教学课件中的辅导型模式是以,【2017年整理】1、下面属于计算机辅助教学简称的是 ( ).doc...
  19. SQL Server 设置IP地址登录方法
  20. 【云驻共创】华为云AI之用Python定制我的《本草纲目女孩》

热门文章

  1. Spring 基于PropertyDescriptor扩展剖析
  2. JS中识别逗号自动转换为逗号+换行。
  3. IDEA配置监控JVM的插件VisualVM
  4. js html显示emoji表情,js emoji表情长度判断(示例代码)
  5. Android studio 如何设计一个较为好看的用户名,密码输入框
  6. 仿新浪微博手机客户端呼出菜单
  7. js 二叉树图形_JS实现二叉树 - 山海散客 - OSCHINA - 中文开源技术交流社区
  8. 信息学奥赛C++语言:旅游费用
  9. 【openjudge】魔兽世界(终极版)
  10. 清华大学计算机专业姚教授,他曾是重度网瘾少年,16岁保送姚班,现如今成计算机领域的大神...