要区分 literal 和 literal-type这两个不同的概念。

literal:文字量,10,3.14, true ,u8"123",  L"好"这些东西。

literal-type: 参考http://en.cppreference.com/w/cpp/concept/LiteralType  简单的说,就可以在用于编译期运算的对象。

对于标量,例如int,显然可以参与编译期运算,例如:constexpr int fac( int N);  //计算阶乘。所以标量都是属于literal-type。

从这里可以看出,literal-type仅仅是类型系统中,一个catalog。所有的类型,要么归类到literal-type,要么归类到none-literal-type。

现在class,也能归类于literal-type,只要满足一些条件:

 1 struct point
 2 {
 3     point(): x(0), y(0){  std::cout << "point() called" << std::endl; }
 4     constexpr point(int x_, int y_): x(x_),y(y_){}
 5     constexpr int hypot() { return x*x + y*y; }
 6
 7 private:
 8     int x,y;
 9 };
10
11 int main()
12 {
13     static_assert( point(3,4).hypot() == 25 );
14     std::cout << "std::is_literal_type<point>::value=" << std::is_literal_type<point>::value;
15 }

point符合literal定义。可以参与到编译期运算static_assert。下面举个反例:

1 struct point
2 {
3     point(): x(0), y(0){  std::cout << "point() called" << std::endl; }
4     constexpr point(int x_, int y_): x(x_),y(y_){}
5     constexpr int hypot() { return x*x + y*y; }
6     ~point(){}
7     int x,y;
8 };

第6行,加了析构函数,point就不再是literal-type了。

1 struct point
2 {
3     point(): x(0), y(0){  std::cout << "point() called" << std::endl; }
4     point(int x_, int y_): x(x_),y(y_){}
5     constexpr int hypot() { return x*x + y*y; }
6 private:
7     int x,y;
8 };

第6行,加了private,point就不再是aggregate-type; 并且构造函数去了constexpr。point就不是literal-type.

改造一下:

struct point
{point(): x(0), y(0){  std::cout << "point() called" << std::endl; }constexpr point(int x_, int y_): x(x_),y(y_){}constexpr int hypot() { return x*x + y*y; }
private:int x,y;
};

现在这个none-aggregate-type就是literal-type

转载于:https://www.cnblogs.com/thomas76/p/8646036.html

C++ literal type相关推荐

  1. go iris框架 常见错误1: cannot use func literal type func报错记录 解决方案

    错误: # command-line-arguments .\IrisDemo1.go:12:26: cannot use func literal (type func("github.c ...

  2. golang 错误: cannot use XXX literal (type XXX) as type XXX in assignment:XXX does not implement XXX

    出错代码如下: package mainimport ("fmt" )type Speaker interface {Hello() }type User struct {Name ...

  3. golang json 获取所有key_Golang —— JSON 大法

    「每一个程序员都无法逃脱 JSON 的命运魔爪」 JSON 简直就是一个神奇的玩意,只要是人类可以阅读的数据结构,基本都可以转成 JSON 的数据格式,其在各个平台.组件.模块中穿梭不止,使用上更是游 ...

  4. 【Go语言】【12】GO语言的结构体

    当我第一次接触到C语言时,就对结构体投入了极大的兴趣,认为这个东西以后大有作为,后来接触Java.C++,面向对象编程中的对象进入我的视线,经过了这么多年的磨练,回过头来再看结构体依旧是那么亲切:同时 ...

  5. golang 接口类型 interface 简介

    目录 1. Go 语言与鸭子类型的关系 2. 值接收者和指针接收者的区别 方法 值接收者和指针接收者 两者分别在何时使用 3. iface 和 eface 的区别是什么 4. 接口的动态类型和动态值 ...

  6. golang 开发常见坑

    目录 初级 开大括号不能放在单独的一行 未使用的变量 未使用的Imports 简式的变量声明仅可以在函数内部使用 使用简式声明重复声明变量 不能使用短变量声明来设置字段值 Can't Use Shor ...

  7. golang 获取struct类型_聊聊golang的类型断言

    序 本文主要研究一下golang的类型断言 类型断言 x.(T) 断言x不为nil且x为T类型 如果T不是接口类型,则该断言x为T类型 如果T类接口类型,则该断言x实现了T接口 实例1 func ma ...

  8. Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[2]

    Go的50坑:新Golang开发者要注意的陷阱.技巧和常见错误[2] 初级篇 开大括号不能放在单独的一行 未使用的变量 未使用的Imports 简式的变量声明仅可以在函数内部使用 使用简式声明重复声明 ...

  9. Golang 新手可能会踩的 50 个坑

    前言 Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷.如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到. 如果花时间学习官方 ...

最新文章

  1. python的with用法(参考)
  2. FFMPEG音视频同步-音视频实时采集并编码推流-优化版本
  3. 如何使用selenium webdriver来判断一个网页加载完毕
  4. xss挖掘思路分享_新手指南 | permeate靶场漏洞挖掘思路分享
  5. java $ class_java文件编译后额外生成的$1.class是怎么一回事
  6. p20怎么用android auto,奔驰23P/P20驾驶辅助系统到底有哪些功能,怎么使用?
  7. JavaScript 从入门到放弃(二)模块化工具requirejs
  8. python网络爬虫系列教程——Scrapy框架应用全解
  9. 一篇文章入门Redis
  10. 【优化预测】基于matlab麻雀算法优化BP神经网络预测【含Matlab源码 F002期】
  11. ixigua解析_资本运作系列课程五:《科创板申请上市估值模型理论解析》现场直播回放...
  12. 据说《算法设计》是算法界三大圣经之一,你读这本书了没?
  13. 51单片机洞洞板用的visio图_怎样用洞洞板焊接一个向STC80c51或者AT89C51单片机里面烧录程序的电路板?...
  14. 三种主流芯片架构简单比较
  15. 微信小程序之授权登录的实现(button按钮)
  16. 101. 熟悉 Java 并发吗,谈谈对 JUC 线程池 ThreadPoolExecutor 的认识吧
  17. EKL-日志收集系统安装
  18. 如何将一段视频做成动图?分享一款视频转gif工具
  19. 用C语言求平均数的四种方法
  20. 一个女孩写给monica信 转贴

热门文章

  1. fmod dsp的问题
  2. request的基本使用用法
  3. 子盒子在父盒子中居中的方法
  4. 使用flex 布局 的盒子 使用 swiper轮播插件,flex布局会失效的解决方法
  5. 川崎机器人零点调整_川崎机器人伺服焊枪标定及调焊枪零点
  6. 抛弃“先好好玩半年”的荒谬想法
  7. 西门子串口通讯03-CP341在Step7环境做Modbus主站通讯
  8. Springboot Vue前后端分离实现基础的后台管理系统
  9. 传智健康2.0-4-预约管理-套餐管理
  10. HTTP3原理和实践