[英]C++ Struct implicit conversion
我需要聲明大量簡單的POD結構,它們的行為相同,但實際上是不同的類型,即不是typedef。
無論如何,我只想讓它們盡可能簡單。 但是在測試時我發現編譯器執行了一些隱式轉換,我想避免這種情況。
鑒於此代碼:
template<typename T>
struct Struct {
T data;
operator T() const { return data; }
};
void fun(Struct<float> value)
{
cout << "Call with Struct :: " << value << endl;
}
void fun(int value)
{
cout << "Call with INT :: " << value << endl;
}
int main(int, char**)
{
fun(3);
fun(4.1f);
fun(Struct<float>{5.2});
fun(Struct<double>{6.3});
return 0;
}
與GCC匯編。
執行給了我:
Call with INT :: 3 // Ok
Call with INT :: 4 // [1]
Call with Struct :: 5.2 // Ok
Call with INT :: 6 // [2]
如何避免隱式轉換[1]和[2]?
謝謝
根據評論的要求:
對operator T()
使用explicit關鍵字實際上會阻止隱式類型轉換。
因此,以這種方式聲明結構:
template<typename T>
struct Struct {
T data;
explicit operator T() const { return data; }
};
將使編譯器阻止隱式轉換,並要求客戶端代碼專門請求轉換(即在需要T(Struct<T>)
地方使用T(Struct<T>)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.