【C++ grammar】数据类型转换、列表初始化

布尔类型

C++语言在其标准化过程中引入了bool、true和false关键字,增加了原生数据类型来支持布尔数据。

布尔类型的大小(所占的存储空间)依赖于具体的编译器实现。也可以用 sizeof运算符得到其占用的空间

Conversion between bool and int

0 -> false // 整数0和布尔false互相转化
true ->1 // 布尔true转化为整数1
non-zero -> true // 任意非0整数转化为布尔true
‘字符’->true

编码规范
1、The prefix is should be used for boolean variables and methods.
布尔变量/函数的命名应使用前缀“is”
例如:isSet, isVisible, isFinished, isFound, isOpen

2、The incompleteness of split lines must be made obvious.
断行必须很明显。
在逗号或运算符后换行,新行要对齐

示例

#include<iostream>
using namespace std;
int main()
{bool isAlpha;isAlpha = false;if (!isAlpha){cout << "isAlpha = " << isAlpha << endl;//boolalpha使bool变量输出按照字符输出cout << boolalpha << "isAlpha=" << isAlpha << endl;}return 0;
}

在这里插入图片描述
练习:

//&&与运算
bool x = 1 && 2;
答案:x =true;
//&按照位进行与运算
// 01 
//&10
// =>00
bool x = 1 & 2;
答案:x =false;

List Initialization(列表初始化)

  1. Before C++11 (C++11标准之前的初始化方法)
    
int x = 0;
int y(2);
char c('a');
int arr[] = { 1,2,3 };
char s[] = "Hello";

2、After C++11

/直接列表初始化)
/* Variable initialization */ 
int x{}; // x is 0; 
int y{ 1 }; // y is 1; 
/* Array initialization */ 
int array1[]{ 1,2,3 }; 
char s1[ 3 ] { 'o', 'k' }; 
char s3[]{ "Hello" }; 
//拷贝列表初始化
/* Variable initialization */ 
int z = { 2 };
/* Array initialization */ 
int array2[] = { 4,5,6 }; 
char s2[] = { 'y','e','s' }; 
char s4[] = { "World" };
char s5[] = "Aloha"; // Omit curly braces (省略花括号)

注意:列表初始化不允许“窄化”,即不允许丢失数据精度的隐式类型转换
问题:初始化列表与 std::initializer_list有什么关系?
列表初始化是一个形象的说法,当我们使用{}的时候,实际上就是在使用列表初始化的功能,实际上当我们在使用花括号的时候,此时编译器会将这些内容传化成一个临时对象,initializer_list是一个类型,就向大家所说的那样,初始化列表会编译成initializer_list;
也许看着名字很生疏,但是其实在我们平常的使用中就曾涉及这个东西,请大家想想:在我们使用printf的时候,传递的变量参数不可能始终一只,这就给函数带来了形式参数的个数的不确定性,因此引入:initializer_list解决这个问题(当然initializer_list的作用不止如此)大家可以看一下这个例子:

//initializer_list的作用:为解决传递参数数量不唯一,通过initailizer_list创建临时对象,将参数值传递给函数
#include void print(std::initializer_list list) {                     for (auto it = list.begin(); it != list.end(); it++) {std::cout << *it << " "; }std::cout << std::endl;
}int main() {print({ 1, 2, });
}

在这里插入图片描述

Type conversion 类型转换

C风格强制类型转换:

printf("%d", (int) 2.5);

C++风格强制类型转换:

cout << static_cast<double>(1) / 2 << endl;
cout << static_cast<double>(1 / 2) << endl;

result:

0.5
0

编码规范
1、Type conversions must always be done explicitly. Never rely on implicit type conversion.
类型转换必须显式声明。永远不要依赖隐式类型转换
例如:floatValue = static_cast(intValue); // NOT: floatValue = intValue;

问题:reinterpret_cast和const_cast有什么用?

//const_cast用于去除指针变量的常量属性。
const int* a;
int* p = a;//此时是报错的,报错原因是:"const int *" 类型的值不能用于初始化 "int *" 类型
//因此为了解决这个问题:const_cast便派上用场
//我们这里可以这样
int* pr = const_cast<int*>(a)//此时便能获取成功,也就是所说的:去除指针变量的常量属性//reinterpret_cast,翻译下来就是重新解释转型(主要是指针)
//reinterpret_cast的作用是,不改变指针地址,仅仅是使编译器改变解释属性
//举个例子:
int n = 1024;
int* p = &n;//
cout << *p;//这里的结果显然会输出:1024;
//此时我们使用:reinterpret_cast;
double* pp = reinterpret_cast<double*>(&n);
cout << *pp;//这里输出的结果将是double类型的值;但是地址指针的地址并未发生改变,仅仅是解释的方法发生了改变

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python对自定义离散点进行指定多项式函数拟合

自定义离散点进行指定多项式函数拟合 用户自己自己输入坐标点&#xff0c;拟合函数可根据用户输入的多项式的最高次方进行自动拟合函数&#xff0c;拟合方法采用最小二乘法进行函数拟合。 (1,2),(2,5),(3,10),(4,17),(5,26),(6,37)(7,50),(8,65),(9,82) 很显然是函数为二次函…

【C++ grammar】C++简化内存模型

1、stack&#xff08;栈&#xff09; 编译器自动分配内存&#xff08;函数内部定义得局部变量、形参&#xff09; 2、堆&#xff08;Heap&#xff09; 一般由程序员分配释放&#xff0c;若程序员不释放&#xff0c;程序结束时可能由OS回收&#xff08;new和delete&#xff09; …

Effect of Diethylene Glycol on the Inkjet Printability of Reactive Dye Solution for Cotton Fabrics.

Effect of Diethylene Glycol on the Inkjet Printability of Reactive Dye Solution for Cotton Fabrics 二乙二醇对棉织物活性染料溶液喷墨印刷性能的影响 Diethylene Glycol 二乙二醇 Inkjet Printability 喷墨印刷性能 Reactive Dye Solution 活性染料溶液 Cotton Fabric…

Silverlight4.0教程之使用CompositeTransform复合变形特效实现倒影

微软于PDC2009上发布Silverlight 4 Beta版&#xff0c;微软在Silverlight 4版本中处理了约8000个的Silverlight终端用户的请求&#xff0c;加入了一系列另开发人员兴奋的新特性&#xff0c;最突出的主要体现在几个方面&#xff1a; 开发工具增强&#xff1a;Visual Studio 2010…

2019年的wps计算机考试题,2019年3月计算机一级WPS模拟题及答案(2.21)

【导语】2019年3月计算机一级考试备考正在进行中&#xff0c;为了方便考生及时有效的备考&#xff0c;那么&#xff0c;无忧考网为您精心整理了2019年3月计算机一级WPS模拟题及答案(2.21)&#xff0c;把握机会抓紧练习吧。如想获取更多计算机一级考试模拟题及备考资料&#xff…

Python求解多项式方程

例如&#xff1a;二次函数&#xff1a;f(x) 10x^2 - 14x 22&#xff0c;依次求解x1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6时函数表达式所对应的函数值。 import numpy as np #f(x) 10*x^2 - 14x 22 p np.array([10,-14,22])#这里存放的是系…

CSS中的border-radius属性

CSS | 边界半径属性 (CSS | border-radius Property) The border-radius property is commonly used to convert box elements into circles. We can convert box elements into the circle element by setting the border-radius to half of the length of a square element. …

【C++ grammar】Enhancement for Type System (C++11 对类型系统的增强)

数据类型 (Data type) int, long int, double, struct, char *, float [], int (*f)()… 计算机程序构造块 计算机程序构造块是不同大小粒度的计算机程序组成部分&#xff0c;它包括变量、表达式、函数或者模块等。 类型系统 (Type System) 类型系统&#xff1a;在编程语言中…

一、织物组织相关基本概念

一、织物形成的五大运动&#xff1a;开口、引纬、打纬、送经、卷取 开口运动&#xff08;先开口让织物形成上下两层&#xff09; 引纬运动&#xff08;在上下两层经纱之间进行引纬&#xff0c;把纬纱穿入上下两层经纱之间&#xff0c;从而实现经纱纬纱之间的交织&#xff09; …

达尔豪斯大学计算机科学世界排名,达尔豪斯大学成了全加最好,这又是个什么排名?...

原标题&#xff1a;达尔豪斯大学成了全加最好&#xff0c;这又是个什么排名&#xff1f;没有“八大”的知名&#xff0c;没有“常春藤”的受宠&#xff0c;虽然它只是众多名校中的普通一个&#xff0c;但只要你对它有个稍微的了解&#xff0c;你一定会爱上它的&#xff01;它虽…

tag标签记录

看到项目代码中有一个自定义的tag标签&#xff0c;想起以前自己写过的标签&#xff0c;竟然忘记的差不多了&#xff0c;手一痒&#xff0c;自己写个简单的tag标签&#xff0c;回顾一下历史知识 首先建一个servlet工程&#xff0c;然后写个index.jsp&#xff0c;项目跑起来&…

LeetCode 53:最大子序和解题以及优化思路(第一次独立刷题记录)

给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 进阶: 如果你已经实现…

三、规则组织的衍生组织——经山形组织数学模型的建立

基础概念公式推到可参考该专栏下的前几篇博文。 经山形组织图&#xff1a; 左半部分&#xff1a;&#xff0c;3上2下1上2下&#xff0c;右斜&#xff0c;飞数为1 右半部分&#xff1a;&#xff0c;3上2下1上2下&#xff0c;左斜&#xff0c;飞数为-1 左右两部分只有飞数是相…

储存过程生成器

/Files/qanholas/SPGen_ReleaseCandidate1_Binaries.zip ---- Dropping stored procedure sp_费用表_SelectAll : --IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id OBJECT_ID(N[sp_费用表_SelectAll]) AND OBJECTPROPERTY(id, NIsProcedure) 1)DROP PROCEDURE [dbo].[sp…

LeetCode 121:买卖股票的最佳时机 思考分析

题目描述&#xff1a; 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易&#xff08;即买入和卖出一支股票一次&#xff09;&#xff0c;设计一个算法来计算你所能获取的最大利润。 注意&#xff1a;你不能在买入股票前卖出…

四、规则组织的衍生组织——经向破斜组织数学模型的建立

基础概念公式推到可参考该专栏下的前几篇博文。 经向破斜组织图&#xff1a; 左半部分&#xff1a;&#xff0c;3上2下1上2下&#xff0c;右斜&#xff0c;飞数为1 右半部分&#xff1a;&#xff0c;2上1下2上3下。左斜&#xff0c;飞数为-1 左右两部分&#xff0c;经纬纱组织…

【数据结构基础】【散列表】

散列表也叫做哈希表(hash table),这种数据结构提供了键(key)和值(value)的映射关系。只要给出一个key&#xff0c;就可以高效查找它匹配的value&#xff0c;时间复杂度接近O(1); 哈希函数 哈希函数通过某种方式&#xff0c;把key和数组下标进行转换。 在java中&#xff0c;每…

VisualStudio运行C++项目检测include<stdio.h>报错解决方案

一、项目—>属性 二、将SDL检查更改为否即可

信息设计中的“父子关系”

交互设计工作核心在于信息架构和交互细节设计。信息架构包括信息分类以及信息展示逻辑设计&#xff1b;交互细节则多表现为控件的选择&#xff0c;交互效果的定义等。在信息设计中&#xff0c;遇到最棘手的问题就是信息量太多而显得设计结果不尽人意&#xff0c;那么在砍不掉需…

[Object-oriented] : 控制反转

前言 : 参加点部落的活动&#xff0c;关于IoC(控制反转)大家有很多的讨论。本文排除对象生成的部份&#xff0c;单纯解释IoC为甚么叫做控制反转。本篇文章以之前写的 [Object-oriented] : 重用内容来举例。 未IoC之前的对象图 : 很明显的左边的组件A&#xff0c;相依右边的组件…