C++ Primer的变量和基本类型详解

 更新时间:2022年01月07日 16:23:12   作者:_逮虾户  
这篇文章主要为大家介绍了C++ Primer,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

1.类型转换

对象的类型定义了对象能包含的数据和能参与的运算,其中一种运算被大多数类型支持,就是将对象从一种给定的类型转换为另一种相关类型。
比如

  • 把非布尔类型的数据赋值给布尔类型时,初始值为0则结果为false,否则为true;
  • 将布尔值赋值给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1;
  • 将浮点数赋给整数类型时,结果值将仅保留浮点数中小数点之前的部分;
  • 将整数值赋给浮点类型时,小数部分记为0,如果证书所占的空间超过浮点类型的容量,精度可能有缺失;
  • 当赋给无符号类型一个超出它表示范围的值时,结果是初始值对于无符号类型表示数值总数取模之后的余数,比如:
unsigned char c = -1   // 假设char占8比特,结果为255
                       // -1 的二进制表示为 11111111 化为十进制为255 
  • 当我们赋给带符号类型一个超出他表示范围的值时,结果是未定义的。程序可能继续工作,也可能崩溃。

当程序在某处使用了一种算术类型的值单数所需要的是另外一种类型的值时,编译器便会执行类型转换。

含有无符号类型的表达式

当一个算数表达式中既有无符号数又有int值时,int值会转换成无符号数(如果表达式中既有带符号类型又有无符号类型,带符号数会自动地转换成无符号数):

unsigned u = 10;                 // unsigned 为 unsigned int简写
int i = 42;
std::cout << u + i << std::endl;  // 若int占32位,输出为4294967264

注意:无符号数不会小于零,以下for循环为死循环

for(unsigned u = 10;u>=0;--u)
    std::cout << u << std::endl;

2.字面值常量

形如42的值被称为字面值常量,每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型。

整形和浮点型字面值

整型字面值可以写成。

20 /*十进制数*/     024 /*八进制数*/      0x14 /*十六进制数*/

整型字面值具体的数据由它的值和符号决定,(尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数,因为符号不在字面值之内,它的作用仅仅是对字面值取负值而已)

浮点型字面值表现为一个小数或科学计数法表示的指数,其中指数部分用E或e标识(3.14159,3.14159E0)

字符和字符串字面值

有单引号括起来的一个字符称为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值。

'a'
"Hello world!"

字符串字面值的类型实际上是由常量字符构成的数组,编译器在每个字符串的结尾处添加一个空字符(’\0’),因此,字符串字面值的实际长度要比它的内容多一。

小技巧:若两个字符串位置紧邻且仅由空格、缩进和换行符分隔,它们实际上是一个整体:

std::cout << "a really, really long string literal "
             " that spans two lines " << std::endl;

转移序列

在C++中有两类字符程序员不能直接使用:

第一类是不可打印的字符,如退格或其他控制字符,因为它们没有可视的图符;

第二类式C++语言中有特殊含义的字符。

指定字面值的类型

通过添加前缀或者后缀,可以改变整型、浮点型和字符型字面值的默认类型。

u8"hi!"    // utf-8字符串字面值
1E-3F      // 单精度浮点型字面值,类型是float
3.14159L   // 扩展精度浮点型字面值,类型为long double

布尔字面值和指针字面值

truefalse是布尔类型的字面值;

nullptr是指针字面值。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • C++超详细讲解拷贝构造函数

    C++超详细讲解拷贝构造函数

    我们经常会用一个变量去初始化一个同类型的变量,那么对于自定义的类型也应该有类似的操作,那么创建对象时如何使用一个已经存在的对象去创建另一个与之相同的对象呢
    2022-06-06
  • C语言数据结构实现链表去重的实例

    C语言数据结构实现链表去重的实例

    这篇文章主要介绍了C语言数据结构实现链表去重的实例的相关资料,这里提供了题目及实例代码,需要的朋友可以参考下
    2017-07-07
  • VC实现的病毒专杀工具完整实例

    VC实现的病毒专杀工具完整实例

    这篇文章主要介绍了VC实现的病毒专杀工具完整实例,详细讲述了针对病毒的进程终止、删除文件及回复注册表与启动项等,同时介绍了与之相关的系统函数,非常具有参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C语言实现学生管理系统

    C语言实现学生管理系统

    这篇文章主要为大家详细介绍了C语言实现学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 深入详解C编写Windows服务程序的五个步骤

    深入详解C编写Windows服务程序的五个步骤

    本篇文章介绍了,使用C编写Windows服务程序的五个步骤的详细概述。需要的朋友参考下
    2013-05-05
  • C语言字符串函数,字符函数,内存函数使用及模拟实现

    C语言字符串函数,字符函数,内存函数使用及模拟实现

    这篇文章主要介绍了C语言字符串函数,字符函数,内存函数使用及模拟实现,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • C++精要分析lambda表达式的使用

    C++精要分析lambda表达式的使用

    Lambda表达式是现代C++在C ++ 11和更高版本中的一个新的语法糖 ,在C++11、C++14、C++17和C++20中Lambda表达的内容还在不断更新。 lambda表达式(也称为lambda函数)是在调用或作为函数参数传递的位置处定义匿名函数对象的便捷方法
    2022-05-05
  • 简单了解设计模式中的装饰者模式及C++版代码实现

    简单了解设计模式中的装饰者模式及C++版代码实现

    这篇文章主要介绍了简单了解设计模式中的装饰者模式及C++版代码实现,ConcreteComponent的引用(指针)也可以达到修饰的功能,需要的朋友可以参考下
    2016-03-03
  • 一篇文章弄懂C++左值引用和右值引用

    一篇文章弄懂C++左值引用和右值引用

    左值(lvalue)和右值(rvalue)是 c/c++ 中一个比较晦涩基础的概念,这篇文章主要给大家介绍了关于如何通过一篇文章弄懂C++左值引用和右值引用的相关资料,需要的朋友可以参考下
    2021-07-07
  • MFC控件之CListCtrl的应用实例教程

    MFC控件之CListCtrl的应用实例教程

    这篇文章主要介绍了MFC控件中CListCtrl的应用方法,包括了针对表格的一些操作,是MFC中比较重要的一个控件类,需要的朋友可以参考下
    2014-08-08

最新评论