【发布时间】:2013-06-20 17:54:49
【问题描述】:
struct T {
int m_x;
T(int x) : m_x(x) {}
operator T() {
return T(0);
}
};
int main() {
volatile T v(2);
T nv(1);
nv = v; // nv.m_x = 0
}
给予:
prog.cpp: In function ‘int main()’:
prog.cpp:14:10: error: no match for ‘operator=’ in ‘nv = v’
prog.cpp:14:10: note: candidates are:
prog.cpp:1:8: note: T& T::operator=(const T&)
prog.cpp:1:8: note: no known conversion for argument 1 from ‘volatile T’ to ‘const T&’
prog.cpp:1:8: note: T& T::operator=(T&&)
prog.cpp:1:8: note: no known conversion for argument 1 from ‘volatile T’ to ‘T&&’
我需要定义什么类型转换重载才能使其工作?
【问题讨论】:
-
我不确定,但我想你写的是
operator T() volatile。 -
@MooingDuck:不能
nv.operator=(n.operator T())吗? -
我认为永远不会调用
operator T,因为没有理由将T转换为T。 -
@Mooing Duck:我也很确定这一点,甚至更重要的是,即使它“有效”,它也毫无意义,因为原来的
volatile也阻止了变量的优化,不管你以后把它转换成什么。 -
@Eric 您还在等待更多信息吗?
标签: c++ casting operator-overloading