91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中怎么聲明語法方法

發布時間:2021-07-19 17:47:24 來源:億速云 閱讀:270 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關C++中怎么聲明語法方法,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一個聲明為每個聲明子都聲明一個實體(entity),同時為那個實體給出一個名字,并且隱含的給出存儲類,類型,和由說明符給出的其它特性。說明符和聲明子一起決定了名字是否是一個對象,數組,指針,引用或函數。例如,

聲明x為一個整型指針,f為一個函數返回一個整型。正是聲明子*x和f()使類型x和f產生區別。

int *x, f();  declarator: [ * [ const ] | & ]... direct-declarator  direct-declarator: declarator-id | ( declarator ) |  direct-declarator ( parameter-declaration-list ) |   direct-declarator [ constant-expression ]  A declarator-id is an identifier, possibly qualified:  declarator-id: [ nested-name-specifier ] identifier  nested-name-specifier: { class-or-namespace-name ::}...

如果聲明子是一個僅包含一個declarator-id的直接-聲明子,那么這說明這個標識符具有decl-specifiers隱含的屬性,而沒有進一步的修飾。例如,在下面的C++聲明語法中

int n;

聲明子是n,這是一個只包含direct-declarator的declarator-id,因此根據含義,n的類型為整型。

如果聲明子為其它形式,那么你可以按照下面的方法確定標識符的類型:首先,假設T為decl-specifiers隱含的類型,忽略friend或static等非類型屬性,同時假設D為聲明子。然后重復下面的步驟直到推導出D為一個declarator-id,此時T正是你所尋找的類型:

  • C++名字空間基本內容講述

  • C++斷點無效解決方案

  • C++基本函數代碼示例

  • C++操作符重載不同方式區別

  • C++文件流應用方法詳細介紹

1. 如果D形如(D1),那么用D1替換D。

2. 如果D形如* D1 或 * const D1,那么根據是否有const,用“指針,它指向T”或者“常量指針,它指向T”替換T,然后用D1替換D。

3. 如果D形如D1(參數-聲明-列表),那么用參數由參數-聲明-列表定義的、“返回T的函數”替換T,然后用D1替換D。

4. 如果D形如D1[常量-表達式],那么用元素個數由常量-表達式給出的“T數組”替換T,然后然后用D1替換D。

5. ***,如果聲明子形如&D,那么用“T引用”替換T,然后用D1替換D。

作為一個示例,考慮下面的C++聲明語法

int *f();

首先,T和D分別為int和*f(),因此D形如*D1,其中D1為f()。

你可能認為D可以形如D1() 或者 *D1。然而,如果D形如D1(),那么D1將不得不為*f,D1將是一個direct-declarator(因為本節開始處的語法注1規定只有direct-declarator前面是())。但是如果我們看看direct-declarator的定義注2,很明顯它不能包含*。因此,D只能是*f(),它形如*D1,其中D為f()。

既然我們已經確定D1為f(),那么我們知道必須用“指針,它指向T”替換T,即“指針,指向整型”,同時用f()替換D。

至此我們還沒有解析D為declarator-id,因此我們必須重復該過程。此時,D1只能是f,因此我們用“返回T的函數”替換T,它是一個“返回整型指針不帶參數的函數”,然后用f替換D。

此時,D為declarator-id,因此推導結束。我們已經確定聲明

int *f();

聲明f的類型為“不帶參數返回整型指針的函數”。另一個例子,聲明

int* p, q;

具有兩個聲明子,*p和q。對于每個聲明子,T都是int。對于***個聲明子,D是*p,因此T變成“指針,它指向整型,”而D為p。聲明p類型為“指針,它指向整型”。

我們單獨分析第二個聲明子,T還是int,D是q。很明顯聲明q為整型。

***,讓我們分析§10.1.2/173中那個奇怪的例子:

double (*get_analysis_ptr())(const vector<Student_info>&);

分析C++聲明語法過程可以分為下面五個步驟

1. T: double D: (*get_analysis_ptr())(const vector<Student_info>&)

2. T: 返回double帶有 const vector<Student_info>& 參數的函數 D: (*get_analysis_ptr())

3. T: function returning double... (如前所示) D: *get_analysis_ptr()

4. T: 指針,它指向一個返回double...的函數 D: get_analysis_ptr()

5. T: 一個函數,返回一個函數指針,它指向一個返回double...的函數 D: get_analysis_ptr

get_analysis_ptr是一個函數,它返回一個函數指針,它指向一個返回double,帶有const vector<Student_info>&參數的函數。我們將如何展開const vector<Student_info>&作為一個練習。幸運的是,C++聲明語法如此令人迷惑;它們中的大多數看起來

declarator: declarator-id ( parameter-declaration-list )

以上就是C++中怎么聲明語法方法,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

简阳市| 蒙城县| 深泽县| 溧阳市| 大田县| 遂川县| 莎车县| 阿拉善右旗| 临猗县| 板桥市| 尤溪县| 平昌县| 邢台县| 龙岩市| 垫江县| 宁陕县| 香港| 泗水县| 思茅市| 新干县| 松滋市| 凯里市| 马尔康县| 河西区| 方山县| 安徽省| 肇东市| 分宜县| 松溪县| 正定县| 遵义县| 南乐县| 张家川| 正镶白旗| 房产| 万盛区| 上虞市| 珲春市| 平阳县| 阜康市| 瑞昌市|