專業(yè)做俄語(yǔ)網(wǎng)站建設(shè)司360搜索首頁(yè)網(wǎng)址是多少
constexpr
提到constexpr,我們會(huì)發(fā)現(xiàn)它和const類比
- 常和const類比
- constexpr符號(hào)常量必須給定一個(gè)在編譯時(shí)已知的值,
若某個(gè)變量初始化時(shí)的值在編譯時(shí)未知,但初始化后絕不變。
#include<iostream>
#include<vector>
#include<string>
#include<cmath>
#include<algorithm>//1.constexpr and type{value}
int main()
{// 定義常量pi,值為3.1415926constexpr double pi = 3.1415926;// 錯(cuò)誤:不能修改constexpr變量的值pi = 8;// 定義變量r,值為2.0double r = 2.0;// 計(jì)算圓的周長(zhǎng),并賦值給變量c// 公式為:周長(zhǎng) = 2 * π * rdouble c = 2*pi*r;
}
記住給常量賦值時(shí)的錯(cuò)誤。
類型轉(zhuǎn)換
5/2結(jié)果是2(不是2.5) ———>整型除法余數(shù)被丟棄
5.0/2.0結(jié)果是2.5 ——————>浮點(diǎn)型除法余數(shù)被保留
但是遇到這種混合型的呢?
2.5/2?
計(jì)算的結(jié)果準(zhǔn)確性是第一位的,站在保證數(shù)據(jù)精確這個(gè)角度來(lái)說(shuō),肯定按照靠近存儲(chǔ)大的類型來(lái)處理,它不會(huì)丟失數(shù)據(jù)的精確度。
2.5/2等同于2.5/double(2):算術(shù)表達(dá)式子中有double型數(shù)據(jù)的話,就按照浮點(diǎn)型計(jì)算,結(jié)果也是double型,否則使用整型算術(shù)計(jì)算,結(jié)果為int型。
記號(hào)type(value)和type{value}表示“將value轉(zhuǎn)換為type類型,就像用值alue來(lái)初始化type類型的變量一樣",使用type{value}可以防止窄化轉(zhuǎn)換,而type(value)不能。
根據(jù)上述理論當(dāng)遇到混合類型ing運(yùn)算時(shí),d/i會(huì)被編譯器自動(dòng)轉(zhuǎn)換成d/double(i) ,結(jié)果為double類型,c2出現(xiàn)了double類型轉(zhuǎn)換int類型的窄化轉(zhuǎn)換,數(shù)據(jù)精確度丟丟失,而c3這里用了{(lán)}處理,防止這個(gè)double類型轉(zhuǎn)換成前面的int類型,保證數(shù)據(jù)的安全。
窄化轉(zhuǎn)換錯(cuò)誤如下:
題目:攝氏度與華氏溫度的轉(zhuǎn)化:9/5這里就嚴(yán)重丟失數(shù)據(jù)
選擇語(yǔ)句
if statement
#include"std_lib_facilities.h"
//3.if statement
int main()
{constexpr double cm_per_inch = 2.54;double length = 1;char unit = 0;cout << "Please enter a length followed by a unit (c or i):\n";cin >> length >> unit;if (unit == 'i')cout << length << " in is " << length*cm_per_inch << " cm\n";else if (unit == 'c') cout << length << "cm is " << length / cm_per_inch << "in\n";else cout << "Sorry,I don't know a unit called " << unit << "\n";
}
值的注意的是else-if 不是C++語(yǔ)法,這是由兩個(gè)if-else組合而且成的
switch statement
int main()
{constexpr double cm_per_inch = 2.54;double length = 1;char unit = 0;cout << "Please enter a length followed by a unit (c or i):\n";cin >> length >> unit;switch (unit){case'i':cout << length << " in is " << length*cm_per_inch << " cm\n";break;case'c': cout << length << " cm is " << length / cm_per_inch << " in\n";break;default:cout << "Sorry,I don't know a unit called " << unit << "\n";break;}
}
關(guān)于switch語(yǔ)句相關(guān)的技術(shù)細(xì)節(jié)
- switch括號(hào)里面必須是整型,字符型和枚舉型,特別地,不能使用字符串型。
- case語(yǔ)句中的值必須是常量表達(dá)式,不能使用變量。
- 不能在兩個(gè)case語(yǔ)句中使用相同的數(shù)值。
- 允許在一個(gè)case語(yǔ)句中使用多個(gè)case語(yǔ)句中使用多個(gè)case常量。
- 不要忘記在每個(gè)case語(yǔ)句末尾加上break。注意:編譯器不會(huì)給出末尾加break的任何警告信息