簡體   English   中英

c樣式類型轉換和operator()

[英]c-style type cast and operator()

問題已更改!

我使用一種簡單的方法從本地名稱空間隱藏枚舉-結構內部的枚舉。 它大致是這樣的:

struct Color
{
    enum Type
    {
        Red, Green, Black
    };
    Type t_;
    Color(Type t) : t_(t) {}
    operator Type () const {return t_;}
private:
  template<typename T>
  operator T () const;
};

運算符T()是對隱式類型強制轉換的保護。 然后,我嘗試使用gcc和keil編譯此代碼:

Color n;
int a[9];
a[ (int)n ] = 1;

gcc編譯它沒有錯誤(這是我所期望的),但是Keil給了我一個錯誤:“無效的類型轉換。操作符()不可訪問”。

所以我的問題是:哪個編譯器正確?

我知道c ++ 11枚舉類,但現在Keil不支持

reinterpret_cast(不是c-style()強制轉換)應該調用類型轉換運算符嗎?

否, reinterpret_cast僅用於一些不可靠的轉換類型:

  • 將指針轉換為整數然后返回
  • 在指針(和引用)之間轉換為不相關的類型

您根本不需要強制轉換即可使用隱式轉換運算符-您根本沒有阻止隱式轉換。 在C ++ 11中,如果運算符是explicit ,則需要static_cast

如果您堅持使用C ++ 03,並且確實要防止隱式轉換但允許顯式轉換,那么我認為唯一明智的做法是提供一個命名轉換函數。

更新 :問題現在已經更改,正在詢問有關C樣式的強制轉換,而不是reinterpret_cast 應該編譯該代碼,因為static_cast可以完成的任何轉換(包括隱式轉換)也可以使用C樣式轉換進行。

暫無
暫無

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

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