我有以下C ++代码段:
class T { };
void f(const T**) { }
int main() {
T *x = new T[5];
f(&x);
}
当我尝试编译时,g ++报告invalid conversion from 'T**' to 'const T**'
。我已完成some research,我理解这个错误。典型的解决方法是将f(const T**)
的定义更改为f(const T* const*)
,以便立即解决问题。
不幸的是,在我的情况下,f
是另一个库中的函数,我无法更改f 的定义。如何将x
的地址传递给f
?
答案 0 :(得分:4)
相反,您可以传递存储与x
相同值的指针的地址。
int main() {
T *x = new T[5];
T const *y = x;
f(&y);
}
当f
返回时,您可以将值复制回x
。
您也可以转发地址。将T const *
写入T *
类型的对象不是别名冲突。
int main() {
T *x = new T[5];
f(const_cast<T const**>(&x));
}
这是有效的这一事实不那么明显,无论如何,简单地传递副本然后再分配给x
。
答案 1 :(得分:2)
T const* x = new T[5];
f(&x);
或
T *x = new T[5];
f(&const_cast< T const*& >( x ) );
答案 2 :(得分:0)
class T { };
void f(const T**) { }
int main() {
T *x = new T[5];
const T* y = x; // <====
f(&y); // use y
}