顯式
-
應用於單引數建構函式時,阻止使用該建構函式執行隱式轉換。
class MyVector { public: explicit MyVector(uint64_t size); }; MyVector v1(100); // ok uint64_t len1 = 100; MyVector v2{len1}; // ok, len1 is uint64_t int len2 = 100; MyVector v3{len2}; // ill-formed, implicit conversion from int to uint64_t
由於 C++ 11 引入了初始化列表,在 C++ 11 及更高版本中,
explicit
可以應用於具有任意數量引數的建構函式,其含義與單引數情況相同。struct S { explicit S(int x, int y); }; S f() { return {12, 34}; // ill-formed return S{12, 34}; // ok }
Version >= C++ 11
-
應用於轉換函式時,會阻止使用該轉換函式執行隱式轉換。
class C { const int x; public: C(int x) : x(x) {} explicit operator int() { return x; } }; C c(42); int x = c; // ill-formed int y = static_cast<int>(c); // ok; explicit conversion