解析多义性

若要执行从一种类型的显式转换为另一种,必须使用转换,指定所需的类型名称。 某些类型转换在语法多义性的结果。 下面的函数样式类型转换不明确的:

char *aName( String( s ) );

它不明确它是函数声明或一个对象声明与一个函数样式转换为初始值设定项:它可以声明返回采用类型 String的一个参数的类型 char * 的功能,也可以声明对象 aName ,并将它初始化与 s 的值强制转换为类型 String。

如果描述可被视为有效的函数声明,它同样的方式处理。 ,仅当无法能是函数声明,即,则语法不正确的 —已检查的语句以确定它是否为一个函数样式类型转换。 因此,编译器将语句函数的声明并在该标识符 s周围忽略括号。 另一方面,语句:

char *aName( (String)s );

char *aName = String( s );

清楚地对象的声明,因此,从类型 char * 的 String 的用户定义的转换调用执行 aName的初始化。

请参见

参考

C++抽象声明