C 中顯示轉換,隱式轉換,臨時物件的疑問。 30

2025-04-01 16:55:13 字數 3998 閱讀 2857

c++中顯示轉換,隱式轉換,臨時物件的疑問。

1樓:網友

這裡梁神面存在了一種常見的錯誤,就是型別轉換,你所寫的**實際上是希望將double型別傳遞給過載的+操作符,而+操作符接受的是complex型別,所以編譯器將進行隱式轉換,但你要記住隱身轉換的腔渣散區域性變數將生成區域性物件,該物件在用過之後將自動銷燬,而c2 = c1 + 編譯器理解為:complex temperary = c1 + 然後伍氏temperary將被消除,所以c2 = tempary 將給c2付乙個不存在的物件,當然會出錯了,而聲名為const 型別,變數預設為全域性的,所以一直存在。

c++ 隱式轉換和顯示轉換的區別

2樓:印永修出碧

顯式轉換是由程式設計師自己主動完成,隱式轉換是由編譯器完成的,其二顯示轉換一般是由高向低,隱式轉換是由低到高,其三顯式轉換的格式為型別(物件)或(型別)物件。

c語言,c++中顯式轉換和隱式轉換的區別?

3樓:千鋒教育

顯式是強制轉換,而隱式是編譯器自動轉換的,一般同一資料型別(如byte,int,float,double),由低階轉為高階為隱式(如int轉為float或double),而高階轉為低階為強制型別轉換,即顯式轉換,須使用者在**中寫的(如float轉為int)。

隱式資料型別轉換是有編譯器完成的,例如:

char a = 'a';

int x = a;

顯示需要程式設計過程中強制轉換,例如。

int a = 10;

double x = (double)a;

4樓:勵若

c方式型別轉換:(target_type)(value),如int i = 5; char c = (char)(i);

c++方式型別轉換:方式有4種。

static_cast類似c語言的型別轉換dynamic_cast繼承體系直接引用和指標直接的轉換const_cast常量轉換,常量轉換成非常量,非常量轉換成常量reintepret_cast重新解釋轉換,重新解釋數值的含義,如int轉換成char*等。

5樓:new妞寧

c++ 中應該儘量不使用轉換,儘量使用顯式轉換來代替隱式轉換。

6樓:網友

1、顯式專換是定義讓這個值型別轉換成要用的值型別,例,定義int

i=5,想把他專換成char型別,就用顯式轉換(char)i。隱式轉換是系統跟據程式需要而自動轉換的,不需要定義,但並不是所有值型別都可以互相轉。

換,所以有了顯式轉換。例,int i=5; char j='a'; int n=i+j;因char可以隱式專換為int型別,所以結果n=102。

2、c方式型別轉換:(target_type)(value),如int i = 5; char c = (char)(i);

c++方式型別轉換:方式有4種。

static_cast類似c語言的型別轉換。

dynamic_cast繼承體系直接引用和指標直接的轉換。

const_cast常量轉換,常量轉換成非常量,非常量轉換成常量。

reintepret_cast重新解釋轉換,重新解釋數值的含義,如int轉換成char*等。

c++ 類的隱式轉換(從 字串 到 類 )

7樓:網友

可以是 const 也可以是非 const 的,取決於具體使用情況。

以std::string為例:

std::string str1("abc"); //非 const 的 str1 。

const std::string str2("abc"); // const 的 str2 。

std::string str3(str1 + "def"); //這裡 "def" 隱式地初始化了乙個 std::string 臨時物件參與 str1 的運算。

臨時物件是匿名的,不能被改變,應該被視為 const 的。

8樓:網友

char型別是用乙個數字表示的unicode字符集中的乙個字元。實際這個數字儲存1--88888之間的數字! 從char型別到int型別,是可以隱式轉換的。

/ int n=aa; //char型別隱式地轉換為int型別 string ee=aa+b

c++ 關於類中轉換函式的問題。

9樓:網友

類中的 operator int();介面 相當於給類賦於 可以隱式轉換成int的能力。

但它實質上還只是乙個函式而已, 此函式返回int型別。 當然, 它不可能返回兩個值。

乙個可能的解決方案是:

像string型別定義的c_str() 一樣, 定義乙個函式( 而非 上面的 自動轉換 函式), 該函式返回 乙個 pair 型別, pair中帶有a和b.

大概類似於:

class c1}

10樓:網友

你這個列子的轉換並不會改變被轉換的物件,轉換後的是乙個臨時值int i = int(dx1);

這樣存在兩個物件,乙個int 乙個c1,而不是吧c1變成int注意c和c++一旦物件定義了(型別確定了),物件的型別無論如何是不會變化的。

c++建構函式的隱式轉化

11樓:網友

所謂的隱式轉化;就是你沒有定義的時候,編譯器根據其內部預設規則進行轉換;

1、隱式轉換沒有詳細的語法規則,因為他不是程式設計師定義的;

2、隱式轉換是程式設計師要怎麼去避免的;因為強型別語言的通病,所以要深度考慮型別匹配;當別人用沒有定義的型別去初始化的時候,就有可能引發隱式轉換;所以要對各種初始化方式進行寫建構函式;就可以避免;比如標準庫中的string類,他的初始化方式有各式各樣,除了體現他強大的功能外,另乙個也避免了隱式轉換;

3、隱式轉換不是我們可以走的捷徑,而是確實要考慮怎麼去避免他,當然有的時候或許像淺拷貝一樣,利用這種規則;但是不提倡。

12樓:網友

呼叫的時候因為有const修飾,所以允許傳乙個臨時值進去,所以會隱式呼叫構造產生乙個這樣的臨時物件。

13樓:網友

沒有特別的語法,只要型別滿足建構函式的引數即可。

c++返回乙個臨時物件的問題

14樓:手機使用者

臨時變數是const型別的,不能把它賦給引用。

string somefamousauthor().

有的編譯器會報錯,因為不能轉換const string到string&,也不能把他傳給引數是string&的函式。如果函式引數不是引用型別的那麼就會建立副本,使用的不是臨時變數了。

15樓:發狂的蜜蜂

具體錯誤怎麼不貼出來?

c++中 臨時變數引用的問題

16樓:節子不哭

引用臨時變數會出現訪問記憶體的錯誤。

函式的返回值,拷貝建構函式的呼叫,表示式的計算中間值一般都是返回臨時變數。

臨時變數在這條語句處理完之後,所佔用的記憶體空間就已經釋放了引用和原來的物件訪問的是同一塊記憶體空間,如果引用乙個臨時物件,那麼是沒有意義的,等於引用一塊已經釋放的記憶體空間,必然會報記憶體訪問錯誤,而且錯誤是致命的。

17樓:網友

表示a &r1 = fun1();不能通過編譯。

error: invalid initialization of non-const reference of type 'a&' from a temporary of type 'a'

個人也認為不該通過編譯!引用乙個函式返回的臨時變數是不可以的。

18樓:水水

在fun2()返回乙個返回值的時候,系統會隱式生成乙個臨時變數temp,但是編譯器不能對乙個臨時變數引用,所以才會報錯。

錯誤1無法將型別「double」隱式轉換為「int」。存在顯式轉換 是否缺少強制轉換怎麼寫

這裡你就要注意以下了,你報錯的位置確定乙個那裡到底是不是真的要從double轉化為int。如果不是的話,你就要好好改一下。如果是的話,按照報錯資訊所說,改為強制型別轉換就行了。強制型別轉化是這樣表示的 int a double b 100 a int b double a 12.2 要把a轉換成in...

C語言的進製轉換程式,C語言進製轉換

在這裡獻醜了 1.將你輸入的數通過字串的方式儲存是方便一下的計算的 正如你舉得例子,輸入137 陣列中存入的是 字元型的137 要將 裡面的每個字元型的數字轉換成數值型的數字就得 p 0 因為 字元儲存時實際儲存的是字元的asc碼,例如 輸入 1 字元型 ascii碼為 49 若不減去0的asc碼 ...

在c中怎麼講double類強制轉換int型別

double c 10.1 int a int c 10 方式方法有很多 只要意識到一點,當大型別轉換成小型別都有可能出錯,只需要型別一致 就可以進行運算了 int a convert.toint32 c 1.0 double c 10.00 int b int c c 中怎麼把double型別轉換...