【发布时间】:2016-04-28 12:00:13
【问题描述】:
好的,所以我正在阅读 C++ Primer,Fifth Editon,并且我是第一次学习 constexpr。开头是这样的:
重要的是要理解,当我们在一个 constexpr 声明,constexpr 说明符适用于指针, 不是指针指向的类型:
const int *p = nullptr; // p is a pointer to a const
*q = nullptr; // q is a const pointer to int
好吧,我想我自己...好吧,它 p 是一个指向 const 的指针,那么这意味着 p(指针) it-self 不是一个常数,所以我可以更改它。所以当然,我在我的 IDE 上试了一下:
#include <iostream>
#include <list>
#include <vector>
#include <string>
int main()
{
const int x = 0;
const int y = 30;
const int *p = x;
*p = &y;
return 0;
}
你猜怎么着。当我尝试将 *p 分配给常量 y 的地址时,它给了我一个错误。那么具体的错误
error: assignment of read-only location '* p'|
哇,我很惊讶。我真的认为这本书说 p 是指向 const 的指针。所以我认为 p 不是一个常数,所以你可以改变它。?还是我的anaolgy错了??
然后它当然会告诉我:
constexpr int *q = nullptr; // q is a const pointer to int
如果我之前的类比是正确的,那么这个指针就是一个实际的 const it-self。所以它可能不会改变..?还是我错了?
constexpr
好吧,伙计们,我明白了。当我将指针分配给“对象”或任何东西时,我不应该取消引用。但是现在我第一次尝试 constexpr 时遇到了这个错误!
error: invalid conversion from 'const int*' to 'int*' [-fpermissive]|
这是我的代码:
int main()
{
const int a = 0;
const int i = 5;
constexpr int *w = &a;
return 0;
}
【问题讨论】:
-
你的错误实际上是因为你需要将指针分配给地址一个变量:
const int *p = &x;当然你不能分配*p,因为结果@ 987654329@ 是常量! (更不用说您正在尝试将const int分配给const int*) -
好的,我刚刚知道了,并在我的 IDE 上快速尝试了它。但在我的 IDE 中也有同样的问题。而且我正在使用代码块,所以它可以准确地告诉我错误在哪里。当然,错误指向我声明 *p = &x @AndyG 的位置
-
阅读对我的评论的编辑。我解决其他问题。
-
好的,非常感谢@AndyG!当我试图分配指针时,我只是搞砸了。原来我不需要 astrix.... -.-
标签: c++ pointers constants constexpr