如果一个类有一个参数构造函数,我理解它是由构造函数隐式转换为适当上下文中的参数类型。定义转换运算符还会使类可转换为其他类型。问题
我看到我不明白方向性,两人在相反的方向上进行转换。作为后续
答案 0 :(得分:7)
这两个是对立的:非显式单参数构造函数允许从参数类型自动类型转换 您的类类型。转换运算符允许隐式转换来自您的类类型。
如果没有特别要求,常识是避免两者。
答案 1 :(得分:3)
不,如果一个类有一个参数构造函数可以隐式转换来自其参数的类型。
至于你的其他问题:
是的,只要有需要。
我不太清楚你在问什么,但如果转换可以采取任何一种方式,那就不明确了。
你必须使用强制转换 - 构造函数不要这样做。
通常,如果您不希望从类自动转换为其他类型(并且大多数情况下不需要),则最好提供永远不会自动调用的命名转换函数(ToString,ToInt,ToX)。由编译器。
引出了另外两个问题:
是,使用命名函数执行至少一次转换。 std :: string这样做 - 使用构造函数从char *转换为string,但另一种方法是使用命名的c_str()函数。
不幸的是,没有。
答案 2 :(得分:2)
如果你可以控制两个你想要互相转换的类,那么这两个操作是否有一个首选的方法来实现这个目的?
我会写一个单一参数, 显式 构造函数。
在允许隐式转换时,我看到了太多非常糟糕的惊喜,所以我总是不允许它们。编写f(A(b))
并不比编写f(b)
困难得多,并且当右f()
不在范围内时,编译器有更多机会提供有意义的错误消息。