Typedef中的C ++指针

时间:2011-10-22 03:37:07

标签: c++ pointers typedef

我对C ++比较陌生,我首先阅读C++ Primer 4th edition。它有一节介绍了Pointers和Typedef,从下面的代码开始。

typedef string *pstring;
const pstring cstr;

我知道在定义typedef string *pstring;之后我可以使用*pstring在我的代码中声明字符串变量。

*pstring value1; // both of these line are identical,
string value2; // value 1 and value2 are string

本书继续const pstring cstr1;*const string cstr2;完全相同。我不明白为什么他们的声明相同?

3 个答案:

答案 0 :(得分:4)

它们不完全相同。

 pstring v1;  // declares a pointer to string
 string v2;  // declares an object of type string
 string* v3;  // this is the same type as v1

答案 1 :(得分:2)

我真的希望你引用的那本书并不像你的报价所显示的那样不准确。我确信你没有准确地引用它。请返回并将书中的内容(我没有副本)与您撰写的内容进行比较。

假设:

typedef string *pstring;

你写的那个

const pstring cstr1;

*const string cstr2;

是完全相同的。事实上,两者都是无效的。

如果您声明某些内容const,则需要为其提供初始值。 *const string cstr2;的语法错误。

所以这是一个正确的方法:

typedef string *pstring;
const pstring cstr1 = 0;  // initialize to 0, a null pointer
string *const cstr2 = 0;  // the same

cstr1cstr2都是指向字符串的const(即只读)指针。

请注意,const关键字必须在 *之后,因为我们需要一个指向字符串的const指针,而不是指向const字符串的指针。

但无论如何,为指针类型声明一个typedef通常是个坏主意。类型是指针类型的事实几乎影响了你用它做的所有事情;为它制作一个typedef隐藏了这个事实。

答案 2 :(得分:1)

你正在学习typedef是很棒的,但是当你在你的应用程序中看到数以万亿行的代码时,你个人看到了它们....然后.... typedef失去光彩。然后他们只是为了阻止真正的代码。我发誓一些开发人员,我维护的代码喝了typedef cool aid并将它们用于所有东西!

我看到的唯一好处是使用它们来缩短非常长的类型名称。例如与STL一起使用的长类型。