【发布时间】:2016-10-07 21:39:17
【问题描述】:
我正在尝试使用自己的演员表操作符编写一个类,但我遇到了多个 operator=s 的问题
我设法用下面的小代码重现了这个问题
#include <string>
class X
{
public:
operator const char*() const {
return "a";
}
operator std::string() {
return "c";
}
};
void func( )
{
X x;
std::string s = "";
s = x;
}
我知道std::basic_string 有多个赋值运算符,这就是编译器感到困惑的原因。
如果我删除任何一个强制转换运算符,它会起作用,但我想知道是否有办法保留两个运算符。
我的班级将根据演员返回不同的值。
我也可以使用static_cast<std::string>(x) 强制转换,但我想知道是否有一种方法可以不使用静态转换?
【问题讨论】:
-
s = std::string(x)怎么样? -
是的,演员表会起作用,(如我的帖子中所述),但我的问题更多是如果我可以提示编译器使用什么,这样我就不需要使用演员表本身.
-
演员表不正是“对编译器的提示”吗?
-
是的,当然,你是对的,但我想你明白我的意思。如果
s被定义为std::string我希望编译器使用operator std::string()而无需强制转换 -
问题是
std::string有两个匹配的构造函数,并且语言中没有规则赋予复制构造函数优先于另一个。没有办法强加一个我知道的。