[英]Sequence of user-defined conversions in C++
我在C ++中遇到一系列用戶定義的轉換問題。 考慮以下代碼:
struct A
{
A(int);
};
struct B
{
B(A);
};
struct C
{
C(B);
};
構造函數在某處定義。 現在,以下語句可以正常工作:
A(1); // A <- int
B(1); // B <- A <- int
C(A(1)); // C <- B <- A <- int
C(B(1)); // C <- B <- A <- int
C(B(A(1))); // C <- B <- A <- int
但是,當我嘗試編譯以下內容時:
C(1); // C <- B <- A <- int
我收到以下錯誤:
error: no matching function for call to ‘C::C(int)’
no known conversion for argument 1 from ‘int’ to ‘B’
我知道在C ++中這種構造是非法的。 不過,我的問題是:
C(B(A(1)))
的構造有些令人討厭。 為了完整起見,我發現了幾個相關的問題(例如, 為什么用戶定義的轉換受到限制? )。 但是,沒有人解決我的問題。
如您所說,您的第一個問題已得到回答。
關於變通方法,假設您不想在C類中添加A構造函數,則可以依靠一個允許的隱式轉換:
C(B(1));
以下也應該起作用:
C(A(1));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.