語意模糊解決
若要從一個類型明確轉換成另一個類型,您必須使用轉型來指定所需的類型名稱。 某些類型轉換會導致語意模稜兩可的情況。 下列函式樣式類型轉換就是模稜兩可的情況:
char *aName( String( s ) );
究竟是使用函式樣式轉型做為初始設定式的函式宣告或是物件宣告並不明確:它可以宣告傳回採用一個 String 類型引數之 char * 類型的函式,也可以宣告 aName 物件並將它初始化,其中 s 值會轉型為 String 類型。
如果宣告可以視為有效的函式宣告,則會以此方式處理。 只有在不可能是函式宣告的情況下 (也就是它的語意不正確),才會查看陳述式是否為函式樣式類型轉換。 因此,編譯器會將陳述式視為函式宣告,必且忽略識別項 s 前後的括號。 換句話說,陳述式:
char *aName( (String)s );
和
char *aName = String( s );
很明確就是物件的宣告,而且會叫用從 String 類型到 char * 類型的使用者定義轉換來初始化 aName。