亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

(type)value和type(value)有什么區別?

(type)value和type(value)有什么區別?

C++
30秒到達戰場 2019-11-19 10:19:18
之間有什么區別(type)value和type(value)在C ++中?
查看完整描述

3 回答

?
慕后森

TA貢獻1802條經驗 獲得超5個贊

沒有區別; 根據標準(第5.2.3節):


一個簡單類型說明符(7.1.5)后跟一個帶括號的表達式列表,可在給定表達式列表的情況下構造指定類型的值。如果表達式列表是單個表達式,則類型轉換表達式(在定義上以及含義上)與相應的強制轉換表達式(5.4)等效。

由于問題指定了type(value)和之間的差異(type)value,因此絕對沒有差異。


當且僅當您要處理用逗號分隔的值列表時,才可以有所不同。在這種情況下:


如果表達式列表指定了多個值,則該類型應為帶有適當聲明的構造函數的類(8.5、12.1),并且表達式T(x1,x2,...)等效于聲明T t (x1,x2,...); 對于某些發明的臨時變量t,結果是t的值作為右值。

正如Troubadour指出的那樣,存在某些類型的名稱,而該類型type(value)根本不會為其編譯。例如:


char *a = (char *)string;

將編譯,但是:


char *a = char *(string);

將不會。但是,具有不同名稱的相同類型(例如,使用創建的typedef)可以起作用:


typedef char *char_ptr;


char *a = char_ptr(string);


查看完整回答
反對 回復 2019-11-19
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

兩者都是強制類型轉換時沒有什么區別,但是有時'type(value)'不是強制類型轉換。


以下是標準草案N3242第8.2.1節中的示例:


struct S 

{

    S(int);

};


void foo(double a) 

{

    S w( int(a) ); // function declaration

    S y( (int)a ); // object declaration

}

在這種情況下,“ int(a)”不是強制轉換,因為“ a”不是值,它是一個參數名稱,并用多余的括號括起來。文件說明


在6.8的聲明中,也可能發生由函數樣式轉換和6.8中提到的聲明之間的相似性引起的歧義。在這種情況下,選擇是在帶有圍繞參數名稱的一對多余括號的函數聲明和以函數樣式作為初始值設定項的對象聲明之間進行選擇。就像6.8中提到的歧義一樣,解決方案是考慮可能是聲明的任何構造。


查看完整回答
反對 回復 2019-11-19
  • 3 回答
  • 0 關注
  • 1272 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號