我目前正在计划一个带有一些转换函数的类(class)。我只是想知道什么时候我必须重载一个类的转换运算符。当我有一个转换构造函数 A(B& b)
时,据我所知,每当我需要将 B 转换为 A 时,我可以只使用转换构造函数。
例子:
B b, c, d;
A a = b; // conversion constructor automatically called
a = A(c); // could also overload assignment operator
function_of_a((A)d); // can equally write this as function_of_a(A(d))
目前我计划只使用一个转换构造函数,而我没有看到重载转换运算符的任何目的,而且我还计划有意不重载 A = B 的赋值运算符以使转换在代码中更加明显。
最佳答案
如果您要转换为原始类型或您无法访问的类型,您显然必须编写一个强制转换运算符 - 例如,operator bool()
或 operator std::string( )
。
除此之外,这主要是界面设计的问题。转换构造函数是目标类型接口(interface)的一部分。转换运算符是源类型接口(interface)的一部分。您需要决定转换应该属于哪个接口(interface)。
例如,假设您有一个 fancy_string
类,以及其他十几个可以转换为 fancy_string
以生成 fancy_string
表示的类. fancy_string
是否应该包含所有这些类的转换构造函数?可能不会。这将使 fancy_string
依赖于所有这十几个类,并且每次添加一个应该可转换为 fancy_string
的类时,您都必须更改 fancy_string
还有。这是糟糕的设计。在这些类中的每一个中都提供一个转换运算符会好得多,因为转换为 fancy_string
的能力应该是这些类接口(interface)的一部分,而不是 fancy_string
.
关于c++ - 我是否需要重载类的强制转换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24790363/