本標準不允許鏈接隱含的轉換。如果允許,那麼你可以寫這樣的代碼:
struct A
{
A(int i) //enable implicit conversion from int to A
};
struct B
{
B(const A & a); //enable implicit conversion from A to B
};
struct C
{
C(const B & b); //enable implicit conversion from B to C
};
C c = 10; //error
你不能指望10
將轉換爲A
,然後將轉換爲B
,然後轉換爲C
。
B b = 10; //error for same reason!
A a = 10; //okay, no chained implicit conversion!
B ba = A(10); //okay, no chained implicit conversion!
C cb = B(A(10)); //okay, no chained implicit conversion!
C ca = A(10); //error, requires chained implicit conversion
該規則同樣適用於隱轉換調用operator T()
含蓄。
考慮這一點,
struct B {};
struct A
{
A(int i); //enable implicit conversion from int to A
operator B(); //enable implicit conversion from B to A
};
struct C
{
C(const B & b); //enable implicit conversion from B to C
};
C c = 10; //error
你不能指望10
將轉換爲A
,然後將轉換爲B
(使用operator B()
),然後轉換爲C
。 S
這樣鏈接隱含轉換是不允許的。你必須這樣做:
C cb = B(A(10); //okay. no chained implicit conversion!
C ca = A(10); //error, requires chained implicit conversion
哪個編譯器?在VS2010上編譯得很好。 – 2011-05-25 06:17:30
@Agnel Kurian,那是因爲VS2010對C++ 0x的部分支持。 – 2011-05-25 06:20:09
@Agnel,它與g ++ 4.4.1。 – iammilind 2011-05-25 06:20:33