在C ++中,对于某些类型T,如何从“T **”获得“const T **”?

时间:2011-10-06 19:10:24

标签: c++ pointers types const type-conversion

我有以下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

3 个答案:

答案 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
}

http://ideone.com/oWZQR

相关问题