簡體   English   中英

為什么是 static_cast<int> 無法將變量轉換為 int</int>

[英]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.3double類型的文字,編譯器推斷a的類型為double

聲明后不能更改變量的類型。 您要么需要一個新變量,要么可以使用能夠保存不同類型值的類型,例如std::variant<double, int>

與可以執行重載的 function 不同,c++ 中的變量是靜態不變的,並且與聲明的變量保持相同的類型。 在您的代碼中,您是靜態類型轉換,如static_cast<int>(a)現在,a 中的值是一個雙精度字面值,並被類型轉換為 integer 字面量,但a將保持與聲明它的類型相同。 因此,您的右手邊將被評估為值2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM