簡體   English   中英

C ++,如何確定隱式轉換/構造函數?

[英]C++, how implicit conversion/constructor are determined?

C ++如何確定幾個級別以下的對象的隱式轉換/構造? 例如:

struct A {};
struct B: A {};
struct C { operator B() { return B(); } };

void f(A a) {}

int main(void)
{
    f(C());
}

是否創建所有可能轉換的樹並選擇適當的終端? 還有嗎 謝謝

到呼叫f()需要兩次轉換,一個用戶定義的轉換( CB )和一個內置轉換(派生對基站: BA )。 具有不匹配參數的調用將在需要零或一次用戶定義的轉換時成功。 如果將成功進行不同的轉換(內置或用戶定義的轉換),那么,如果所有可能的方式在所需的轉換數量/種類方面均相等,則該調用將是模棱兩可的,並且編譯器需要發出診斷信息。

標准未指定編譯器如何實現此目的。

該標准未指定。 它僅指定結果。 每個不同的編譯器供應商都可以選擇任何方式實現此目標,只要它們給出正確的結果即可。

所以可能有很多不同的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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