gpt4 book ai didi

c++ - 将 const 和 decltype 与指针变量一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:35 24 4
gpt4 key购买 nike

下面的代码允许我更改 *p2 的值,即使 p2 是用 const 声明的。

int *p1;

const decltype(p1) p2 = new int(100);
*p2 = 200;
cout << "*p2: " << *p2 << endl; // Outputs *p2: 200

但是,如果我使用“int *”而不是“decltype(p1)”,那么编译器会标记错误。

const int * p2 = new int(100);
*p2 = 200;
cout << "*p2: " << *p2 << endl;

error: assignment of read-only location ‘* p2’
*p2 = 200;
^

我正在使用 g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2。

应用于指针变量时,decltype 是否忽略 const 说明符?

最佳答案

const decltype(p1) p2 表示 int* const p2

这意味着您不能更改p2,但您可以更改所指向的内容。


const T 总是将 const 应用于 T 的所谓“顶层”。当 T 是复合类型(即,从基本类型集构建的类型)时,如果要将 const 应用于较低的水平。

当 T 是 int * 时,添加顶级 const 将得到 int * const* 划定一个层次;要获取 * 下面的内容,您必须手动删除 *,应用 const,然后放入 * 返回。

一个可能的解决方案是:

const std::remove_pointer<decltype(p1)>::type *p2 = new int(100);

关于c++ - 将 const 和 decltype 与指针变量一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com