[英]why static_cast<int> fails to convert variable to an int
我有以下代碼,我試圖將變量轉換為 integer,但從倒數第二個打印中可以看出,該類型仍被視為“d” - 有人知道如何將其更改為 i,因此有它的行為就好像它最初被初始化為auto a = 2
?
#include <iostream>
#include <stack>
#include <string>
#include <cmath>
using namespace std;
int main()
{
auto a = 2.3;
cout << typeid(a).name() << endl;
a = static_cast<int>(a);
cout << typeid(a).name() << endl;
cout << a << endl;
return 0;
}
C++ 是一種靜態類型語言。 變量的類型在運行時不會改變。 如果變量的類型是double
,那么它永遠不會變成其他任何東西。
例如,您可以使用另一個變量:
int b = a;
為了詳細說明這里的其他答案, static_cast<int>(a)
確實將存儲在a
中的值轉換為int
。 但是,當將結果分配回a
時,它會隱式轉換回double
,因為變量a
的類型被推斷為double
。
這兩行代碼實際上是等效的:
a = static_cast<double>(static_cast<int>(a));
// There is the same conversion to double here, but it's implicit:
a = static_cast<int>(a);
請注意,特殊的auto
“類型”不會將變量聲明為任何類型; 相反,它指示編譯器根據分配給變量的值來確定類型應該是什么。 由於2.3
是double
類型的文字,編譯器推斷a
的類型為double
。
聲明后不能更改變量的類型。 您要么需要一個新變量,要么可以使用能夠保存不同類型值的類型,例如std::variant<double, int>
。
與可以執行重載的 function 不同,c++ 中的變量是靜態不變的,並且與聲明的變量保持相同的類型。 在您的代碼中,您是靜態類型轉換,如static_cast<int>(a)
現在,a 中的值是一個雙精度字面值,並被類型轉換為 integer 字面量,但a將保持與聲明它的類型相同。 因此,您的右手邊將被評估為值2 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.