77
當涉及到構造函數時,添加關鍵字explicit
可防止熱心編譯器在不是程序員的第一意圖時創建對象。這種機制是否也適用於鑄造操作員?演員可以明確嗎?
struct Foo
{
operator std::string() const;
};
這裏,比如,我想是能夠施展Foo
爲std::string
,但我不希望這樣的投含蓄髮生。
當涉及到構造函數時,添加關鍵字explicit
可防止熱心編譯器在不是程序員的第一意圖時創建對象。這種機制是否也適用於鑄造操作員?演員可以明確嗎?
struct Foo
{
operator std::string() const;
};
這裏,比如,我想是能夠施展Foo
爲std::string
,但我不希望這樣的投含蓄髮生。
是和否
這取決於您正在使用的C++版本。
explicit
類型轉換運算符例,
struct A
{
//implicit conversion to int
operator int() { return 100; }
//explicit conversion to std::string
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a; //ok - implicit conversion
std::string s = a; //error - requires explicit conversion
}
與g++ -std=c++0x
編譯它,你會得到這樣的錯誤:
prog.cpp:13:20: error: conversion from 'A' to non-scalar type 'std::string' requested
但只要你寫:
std::string s = static_cast<std::string>(a); //ok - explicit conversion
順便說一句,在C++ 11中,顯式轉換操作被稱爲「上下文相關的轉換運算符」如果將其轉換爲布爾。另外,如果你想知道更多關於隱性和顯性的轉換,閱讀本主題:
希望有所幫助。
+1。可以發佈一個C++ 11代碼的例子嗎? – FailedDev
@FailedDev:完成。 :-) – Nawaz
非常感謝! – FailedDev