Cap*_*ths 1 c++ casting static-cast
我有用户定义的类型:
class String::CharProxy
{
public:
const char* operator&() const;
char* operator&();
operator char() const;
operator char&();
};
Run Code Online (Sandbox Code Playgroud)
问题是当我尝试执行一些显式转换时,调用了错误的运算符:
CharProxy p(...);
static_cast<char>(p); // operator char&() call instead of operator char() const
Run Code Online (Sandbox Code Playgroud)
我希望在投射到和-仅投射到时operator char() const
被呼叫。char
operator char&()
char&
谁能解释一下这个机制是如何运作的?我有什么地方弄错了吗?
在您的 中static_cast
, 和operator char() const
都是operator char&()
根据 [over.match.conv] 的候选函数,因为 和char
都char&
可以char
通过标准转换序列进行转换。
在这两个函数之间,编译器然后根据标准重载解析规则进行决定。在这些中,operator char&()
被发现更适合,因为它的隐式this
参数与您传递给它的对象具有相同的 cv 限定符(即: 上没有const
限定符p
)。您可以显式调用另一个运算符
static_cast<char>(static_cast<CharProxy const &>(p));
Run Code Online (Sandbox Code Playgroud)
但从更现实的角度来说: 1. 用户定义的转换函数是一个马蜂窝,99% 的情况下最好避免使用,2. 如果您的operator char() const
语义与您的语义如此不同operator char&()
,以至于您不能使用后者,而您可以使用前者,你在那里建造的东西似乎非常危险。当然,它不符合 POLA 标准。
归档时间: |
|
查看次数: |
49 次 |
最近记录: |