const指针和指向const的指针

时间:2013-08-13 03:46:49

标签: c++ pointers

而不是这样做:

int* const p;

而且:

const int* p;

你不能通过这样做来更容易阅读:

typedef int* ptr;
const ptr p; //Constant pointer to an integer

typedef const int ptr;
ptr* p; //Pointer to a constant integer

3 个答案:

答案 0 :(得分:3)

没有理由这样做。它不仅会降低你的代码的可读性,而且还没有用。

typedef const int ptr;

^没有意义 - 它是一个const int,但你称之为指针。 只需保存自己和读者并输入

const int* ptr;

编辑:

直接回答你的问题:不,你不会让它变得更容易。

编辑#2

另一点,当你有

时会发生什么
typedef const int ptr;
typedef const long ptr;
typedef const float ptr;

它不仅没有意义,因为它们不是指针,但现在你有一堆叫做ptr的东西,你会对你实际写的内容感到困惑。

答案 1 :(得分:0)

浏览以下链接。作者已经清楚地解释了何时使用typedef以及何时不使用。如果我开始解释,这个博客将会变得更大。

http://www.oualline.com/books.free/style/c06.pdf

答案 2 :(得分:0)

typedef应该在您特定需要新类型表示某些内容时使用。仅仅使typedef保存输入是没有意义的,并且会导致难以阅读的代码。

隐藏constvolatile限定符的良好typedef示例如下:用于只读硬件寄存器(在嵌入式软件开发中很常见)。你会写类似

的东西
typedef const volatile int *ro_reg_t; /* readonly hardware register */

然后声明你的硬件寄存器:

const ro_reg_t CHIP_VERSION = (void *)0x4240000c;

这样你现在可以写

int val = *CHIP_VERSION;

但不是

CHIP_VERSION = 0xf00d;

*CHIP_VERSION = 0xbaad;