相关疑难解决方法(0)

C++隐式转换

关于我最近回答的一些评论,在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
}
Run Code Online (Sandbox Code Playgroud)

我的断言是第一个函数调用是一个错误,因为没有从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
Run Code Online (Sandbox Code Playgroud)

如果您可以指出我错在哪里,无论是在这里还是在原始答案中,最好是参考C++标准,请这样做.

而C++标准的答案似乎是:

最多一个用户定义的转换(构造函数或转换函数)隐式应用于单个值.

感谢Abhay提供报价.

c++

23
推荐指数
4
解决办法
2万
查看次数

为什么隐式转换在C++中是有害的

我知道关键字explicit可用于防止隐式转换.

例如

Foo {

 public:
 explicit Foo(int i) {}
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在什么条件下,应该禁止隐含转换?为什么隐式转换有害?

c++

23
推荐指数
3
解决办法
2443
查看次数

标签 统计

c++ ×2