我总是搞砸如何正确使用const int*、const int*const和int const*。有没有一套规则来定义你能做什么和不能做什么?
我想知道在赋值、传递给函数等方面的所有注意事项。
我总是搞砸如何正确使用const int*、const int*const和int const*。有没有一套规则来定义你能做什么和不能做什么?
我想知道在赋值、传递给函数等方面的所有注意事项。
当前回答
对于那些不了解顺时针/螺旋规律的人:从变量的名称开始,顺时针移动(在这种情况下,向后移动)到下一个指针或类型。重复此操作,直到表达式结束。
下面是一个演示:
其他回答
对于那些不了解顺时针/螺旋规律的人:从变量的名称开始,顺时针移动(在这种情况下,向后移动)到下一个指针或类型。重复此操作,直到表达式结束。
下面是一个演示:
一般规则是const关键字应用于它前面的内容。异常,起始常量适用于以下内容。
constint*与intconst*相同,表示“指向常量int的指针”。const int*const与int const*const相同,表示“指向常量int的常量指针”。
编辑:对于该做的和不该做的,如果这个答案还不够,你能更准确地说出你想要什么吗?
对我来说,常量的位置,即它相对于*是出现在左侧还是右侧,还是同时出现在左侧和右侧,有助于我理解实际含义。
*左边的常量表示指针指向的对象是常量对象。*右边的常量表示指针是常量指针。
下表摘自斯坦福CS106L标准C++编程实验室课程阅读器。
在我读到C++大师斯科特·梅耶斯(Scott Meyers)的这本书之前,我和你一样心存疑虑。请参阅本书中的第三项,其中他详细介绍了如何使用const。
只需遵循以下建议
如果单词const出现在星号的左侧,则所指向的是常量如果单词const出现在星号的右侧,则指针本身是常量如果常量出现在两侧,则两者都是常量
最初的设计者多次将C和C++声明语法描述为失败的实验。
相反,让我们将类型命名为“pointer to type”;我叫它Ptr_:
template< class Type >
using Ptr_ = Type*;
现在Ptr_<char>是一个指向char的指针。
Ptr_<const char>是指向const char的指针。
const Ptr_<const char>是指向const char的const指针。