簡體   English   中英

C ++中用戶定義的轉換順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM