C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream>
using namespace std; int main()
{
using cullptr = const unsigned long long *; //C++11新变量类型long long;constexpr unsigned long long * 为非法
typedef wchar_t * wchptr;
/*
使用using或typedef声明的类型别名的变量实例初始化时,不同类型变量不可使用“,”写在同一行
如://cullptr c{0}, wchptr w{0}为非法
*/
cullptr cp1{ (nullptr) }; //C++11新特性nullptr空指针;cullptr cp{ (nullptr) }, wchptr wp({ NULL }); 为非法,或者会报语法错误
wchptr wp1({ NULL });
cullptr cp2 = (), 常无符号长整型指针3 = { cp2 }; // cullptr cp4 = ({ 0 }); 为非法
wchptr wp2 = NULL;
wchptr wp3({ }), 宽字符指针4{ () };
/*
constexpr仅可用于修饰字面值类型的常量表达式,其修饰的表达式在编译时会进行计算。
字面值类型包括:算数类型、引用、指针(初始化值必须为nullptr或0),
而自定义类型、stream、string均不属于字面值类型。
*/
constexpr long double ld{ .f };
constexpr cullptr * cp4 = { ((NULL)) }; // “()”初始化时可多层嵌套,但C++11新特性列表初始化符号“{}”不可以嵌套
constexpr wchptr ** wppp(); /*
类型指示符auto,可将表达式赋值给变量,该变量类型将有编译器自动推断完成,其在变量声明时必须初始化。
推断类型时会忽略初始化表达式中顶层的const特性,
而当初始化表达式为指向一个常量的指针是const特性才会保留下来,否则需手动强制声明为const。
当设定auto为引用时,认为是常量引用。
此外,不一定与初始值一样,编译器会适当改变其类型以更加适应初始化规则。
*/
const wchar_t w = { ('嗨' )};
// 推断为wchar_t * 类型 推断过程中,wchar_t * = const wchar_t + wchptr,变量w的顶层const特性被舍弃。
auto autovar1 = w + wp1;
// 推断为const wchar_t类型,变量w的顶层const特性被舍弃。
auto autovar2 = w;
auto autovar3 = &autovar2; // 推断为wchar_t const * 类型,由于初始化表达式为指向常量值的指针。
auto const autovar4 = autovar3; // 推断为wchar_t const * 类型,关键字顺序不影响推断过程。
auto &autovar5 = w; // 为常量引用 //一个语句中设定多个变量,所有变量的初始值必须为同一种类型。(auto一行代码中仅会推断一种类型)
auto &autovar6 = autovar5, &autovar7 = autovar5; // 此行只能被推断为cosnt wchar_t &autovar5,若autovar7初始化为其他值,则报错。 return ;
}
C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)的更多相关文章
- C++11 constexpr常量表达式
常量表达式函数 要求: 函数体内只有单一的return返回语句 例如: constexpr int data() { const int i=1; //含有除了return以外的语句 return i ...
- C++11 特性
之前工作中开发/维护的模块大多都是 "远古代码",只能编译 C++98,很多 C++11 的特性都忘得差不多了,再回顾一下 右值引用&转移语义: 消除两个对象交互时不必要的 ...
- 定义类型别名(typedef,using)
说到类型别名,无非是给类型名(如int,char,float,double,bool)取一个比较有特殊含义的名字而已 最常用的关键莫过于 typedef 吧 typedef最常见的用法是与结构体str ...
- c++11特性学习总结
ubuntu 16.04 自带gcc 5.4 支持c++11 ubuntu 18.04 自带gcc 7.3 支持c++14 查看编译器支持: c++11 c++14 c++17 c++11 featu ...
- Python - typing 模块 —— 类型别名
前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...
- 深入浅出TypeScript(4)- 使用接口和类型别名
在TypeScript中,为了可以约束对象定义,提供了两个新的特性,接口和类型别名. TypeScript中的接口 在强类型语言中,都有接口的概念,那么TypeScript中的接口是如何使用的呢? 接 ...
- TS数据类型:类型别名/联合类型/字面量类型/类型推论等纲要
在学C/C++ Java等强类型语言时,变量类型是唯一的,需要先指定.PHP JavaScript等弱类型语言时,无需指定变量类型 但是,TypeScript里面的联合类型 (Union Type) ...
- mybatis中自建的类型别名
在使用mybatis过程中经常用到类型别名,除了我们自己新建的别名外,mybatis还自带了很多类型别名和java中的类型的映射,下面先看一个自建的别名的配置 <typeAliases> ...
- 浩哥解析MyBatis源码(八)——Type类型模块之TypeAliasRegistry(类型别名注册器)
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6705769.html 1.回顾 前面几篇讲了数据源模块,这和之前的事务模块都是enviro ...
随机推荐
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- java EE设计模式简介
1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...
- fiddler发送post请求
1.指定为 post 请求,输入 url Content-Type: application/x-www-form-urlencoded;charset=utf-8 request body中的参数格 ...
- 【云知道】LoadRunner 录制问题集锦
关键词:各路录制小白汇集于此 虽然知道君对录制不感冒,但总是看到扎堆的人说这些问题,忍不住要站出来了. 百度虽好,帮助了很多小白,但关键是百度并没有排除错误内容,经过历史的几年传播,错的都快变对的了, ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- 5.0 JS中引用类型介绍
其实,在前面的"js的六大数据类型"文章中稍微说了一下引用类型.前面我们说到js中有六大数据类型(五种基本数据类型 + 一种引用类型).下面的章节中,我们将详细讲解引用类型. 1. ...
- SAP CRM 性能小技巧
导言 本页面打算收集SAP CRM实施中可以用于避免性能问题的注意事项,重要的事项会由图标标识. 如果你有其他的技巧想要说出来,别犹豫! 性能注意事项 通用 缓存读取类访问,特别是在性能关键的地方,比 ...
- 编译器开发系列--Ocelot语言1.抽象语法树
从今天开始研究开发自己的编程语言Ocelot,从<自制编译器>出发,然后再自己不断完善功能并优化. 编译器前端简单,就不深入研究了,直接用现成的一款工具叫JavaCC,它可以生成抽象语法树 ...
- VS2015墙内创建ionic2
开始学习ionic2,试验各种方法,感觉以下是紧跟rc版本的最佳方案 STEP1 设置cnpm npm install -g cnpm --registry=https://registry.npm. ...