深入學習c 關鍵詞第二部分

2021-10-09 00:08:41 字數 1894 閱讀 8869

標頭檔案 iostream

同於 ~

帶有constexpr標識的函式的計算工作可以在編譯階段完成(在可以計算出來的情況下)。

如下面**所示,若沒有constexpr則會報錯。

#include

using

namespace std;

constexpr

intmin

(int a,

int b)

intmain()

也就是說,這個關鍵字可以拓展c++在編譯期的能力。

(當你使用它時,說明你的程式設計上有問題)

這個關鍵字用於改變const的不變性。

如去除不變性:

const

int i =1;

int* pi =

const_cast

<

int*

>

(&i)

;*pi =

4;

類似於auto,decltype的作用也是定義型別。

如:

double a =3;

auto b = a;

//不僅將 b 定義為 a 的型別(double),還將 a 的值賦給 b。

decltype

(a) b;

//將 b 定義為 a 的型別(double),但未給 b 賦值。

decltype

((a)

) c = b;

//這裡 a 的兩邊有括號,表示將 c 的型別為 a 的引用(double&),即 c 成為 b 的引用。

auto

& d = a;

//auto的引用方法

decltype與auto一起使用:

template

<

typename t,

typename u>

auto

add(t a,u b)

->

decltype

(a+b)

即讓函式返回值由a+b的型別而定。

也可以只用auto,但是稍有不同(見注釋):

template

<

typename t,

typename u>

auto

add(t a,u b)

轉換具有繼承關係的指標或引用,且只能子轉父(因為dynamic_cast做安全性檢查)。

如:

parent* p =

new child;

child* c =

dynamic_cast

>

(p);

在轉換失敗時,如果轉換的是指標,則會返回空指標,如果轉換的是引用,則會丟擲異常。

enum

classa:

char

;

class使a成為乙個強型別(即使用時必須a::red),char規定a的大小。

被explicit修飾的函式要被明確地使用(不進行預設的轉換)。

如:

struct a};

struct b};

a a1 =1;

//可,等於a a1 = a(1);

//但是b不能這樣,b可以:

b b1(1

);

關鍵字extern用來告知編譯器變數在當前範圍之外宣告過了。被extern語句描述過的變數將分派不到任何空間,因為他們在別的地方被定義過了。extern語句頻繁的用於在多個檔案之間的跨範圍資料傳遞.。

1、1.0預設為double型別

c 學習筆記第二部分

part 2 一 陣列 指標 在c 中的陣列std string str string是std類裡面的乙個物件 這個語句就是命名乙個陣列名字叫做str 2.c 允許指標群 p,就是多個指標有同樣的值 int p1 myint int p2 myint c 支援無型別 void 指標,就是沒有被宣告為...

Web API 第二部分

web api 第二部分 元素偏移量 offset element.offsettop element.offsetleft element.offsetwidth 可以得到元素的大小 寬度和高度 是包含padding border width element.offsetheight elemen...

redux 第二部分

redux 的使用方法,為什麼使用 action.js 檔案,進行優化 將其分開,然後我們通過工廠函式的每次返回不同的物件,由於引數是固定的,每次返回的都是事件型別和事件資料,所以我們可以使用乙個函式,通過其返回值來返回乙個物件,讓後傳遞給 action 我們的 reducer 函式有兩個引數,引數...