关于我最近的答案“ 在C ++中还可以使用其他有用的强制转换”的几点评论表明,我对C ++转换的理解是错误的。为了澄清问题,请考虑以下代码:
#include <string>
struct A {
A( const std::string & s ) {}
};
void func( const A & a ) {
}
int main() {
func( "one" ); // error
func( A("two") ); // ok
func( std::string("three") ); // ok
}
我的断言是,第一个函数调用是一个错误,因为没有从const char *到A的转换。从字符串到A的转换,但是使用此转换将涉及多个转换。我的理解是不允许这样做,这似乎已由g ++ 4.4.0和Comeau编译器确认。使用Comeau时,出现以下错误:
"ComeauTest.c", line 11: error: no suitable constructor exists
to convert from "const char [4]" to "A"
func( "one" ); // error
如果您可以在此处或原始答案中指出我错了,最好参考C ++标准,请这样做。
C ++标准的答案似乎是:
最多将一个用户定义的转换(构造函数或转换函数)隐式应用于单个值。
感谢Abhay提供报价。
莫回无
慕田峪9158850
相关分类