【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.pswp.cn/news/378153.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378153.shtml
英文地址,請注明出處:http://en.pswp.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) 很顯然是函數為二次函…

選哪個云計算平臺部署自己的網站?

技術發展讓我們可以擁有免費的空間啦&#xff01; 現在的云計算平臺很多&#xff0c;各大公司都在做這個。 我最近用了國內訪問比較順暢的&#xff0c;新浪SAE&#xff0c;cloudfoundry&#xff0c;openshift。 開始用新浪SAE&#xff0c;因為豆子花光了&#xff0c;就轉到clou…

array_fill_PHP array_fill()函數與示例

array_fillPHP array_fill()函數 (PHP array_fill() Function) array_fill() function is used to fill the n elements in an array from given index with the specific value. array_fill()函數用于使用給定索引從給定索引中填充數組中的n個元素。 Syntax: 句法&#xff1a…

阜陽市計算機學校助學金申請書,計算機系貧困生助學金申請書

尊敬的學校領導&#xff1a;您好&#xff01;我叫____來自計算機系____級____專業____班,我是一名喜愛讀書、熱愛集體并且性格溫和的男孩。我出生在一個貧窮而又落后的小村。家中有五口人&#xff0c;父母文化淺薄,在家務農,由于多年的勞累,父母兩人身體狀況較差,農業收入低微,…

【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…

一些常用的工具

可查看網站服務器使用的架構 http://toolbar.netcraft.com/site_report?urlwww.163.com 可在線制作 icon 圖標 http://www.damotou.com/index.php 好的UI設計 http://www.uiimg.com/ 轉載于:https://www.cnblogs.com/ouuy/p/3183613.html

Silverlight4.0教程之使用CompositeTransform復合變形特效實現倒影

微軟于PDC2009上發布Silverlight 4 Beta版&#xff0c;微軟在Silverlight 4版本中處理了約8000個的Silverlight終端用戶的請求&#xff0c;加入了一系列另開發人員興奮的新特性&#xff0c;最突出的主要體現在幾個方面&#xff1a; 開發工具增強&#xff1a;Visual Studio 2010…

julia矩陣運算_Julia中的復數及其運算

julia矩陣運算Julia| 復數 (Julia | Complex Numbers) The syntax to represent the complex number in Julia is: 在Julia中表示復數的語法為&#xff1a; Syntax: 句法&#xff1a; ABimHere, A and B are the values, and im is the global constant which is bound to th…

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;在編程語言中…

.net romoting 的EventWrapper類

.net romoting 的EventWrapper類 注意&#xff1a;防火墻的問題 --------------------------------------------------- //定義廣播服務接口 [Serializable] public delegate void BroadCastEventHandler(string info); public interface IBroadCastService {…

一、織物組織相關基本概念

一、織物形成的五大運動&#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;項目跑起來&…

java類只讀怎么辦_如何在Java中制作一個只讀類?

java類只讀怎么辦The question is that "can we make a read-only class in Java?" 問題是“我們可以用Java制作一個只讀類嗎&#xff1f;” The answer is: "Yes, we can make a read-only in java." 答案是&#xff1a; “是的&#xff0c;我們可以在J…

LeetCode 53:最大子序和解題以及優化思路(第一次獨立刷題記錄)

給定一個整數數組 nums &#xff0c;找到一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4] 輸出: 6 解釋: 連續子數組 [4,-1,2,1] 的和最大&#xff0c;為 6。 進階: 如果你已經實現…

NHibernate 的 ID 標識選擇器

在 Hibernate 中&#xff0c;每個對象需要一個標識 ID&#xff0c;通過這個標識 ID 建立對象與數據庫中記錄的對應關系。 Nhibernate 提供了多種方式來建立這個 POID。基于不同的生成策略&#xff0c;可以選擇更佳的方式。 首先是賦值方式&#xff1a;assigned&#xff0c;這種…