使用new运算符初始化指向指向常量float的指针

4
考虑以下声明:

const float** b;
const float* const* c;
float* const* d;

首先,我想确保以下几点:
  • b 是指向指针的指针,指向的是 const float。

  • c 是指向指针的指针,指向的是 const pointer,该 pointer 指向 const float。

  • d 是指向 const 指针的指针,该指针指向 float。

现在我的问题是如何使用 new 运算符初始化每个指针?

1
你实际上想要创建一个新的浮点数,创建一个浮点数数组,创建一个浮点数数组的数组,还是指向上述任何一个现有的对象? - Richard Hodges
只是一个新的浮点数,以免让事情变得复杂化。 - adem sonmez
1个回答

4
const float** b = new const float*();
const float* const* c = new const float*(nullptr);
float* const* d = new float*(nullptr);

如果它们指向const,那么类型的间接性会减少一个并设置值。


3
哇,这就像把一把装满子弹的手枪放在孩子手中! - Richard Hodges
1
@RichardHodges 他要求的。 - Tyker
谢谢您的回答,但我注意到在某些情况下,在右侧省略const关键字时编译器不会报错。例如:const float* const* b = new const float*const float* const* b = new float*const float* const* histRange=new float*((float*)(new float(45)))const float* const* histRange=new const float*((float*)(new float(45)))它们都可以工作。(至少它们被编译时没有出现错误)。但是这个会出错:const float** b = new float*我真的不明白什么时候必须使用const,什么时候不必使用。 - adem sonmez
@ademsonmez const float** 是指向常量浮点数的指针,因此您需要新建一个指向常量浮点数的指针。 - Tyker
@Tyker,对于 const float* const* histRange=new float*(nullptr) 这个也是 指向常量指针的常量指针,但你可以不使用 const 来初始化它。 - adem sonmez
@ademsonmez 这是由于隐式转换引起的,在 const float* const* histRange=new float*(nullptr) 中,你将一个 float** 转换为 const float * const * 是允许的,但是从 float** 转换为 const float** 是不允许的,请参见 https://dev59.com/oHE95IYBdhLWcg3wp_gg 了解更多细节。 - Tyker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接