带有const参数的C ++构造函数

时间:2014-08-03 18:46:09

标签: c++ parameters constructor const

我只是想知道将const char* cchar* const c作为参数的构造函数有什么区别? 如果我在头文件和源文件中交换char*const这不是问题,但是当我混合它们时它将无法编译,说没有这样的重载构造函数。

当我将自己的类用于复制构造函数时,如果我将MyClass const &otherconst MyClass &other混合在一起,编译器似乎并不感到烦恼。

有人可以开导我吗? :)

4 个答案:

答案 0 :(得分:2)

此记录const char *c声明指向类型为const char的对象的指针c。即使用此指针,您可能无法更改指针所引用的对象。

此记录char * const c声明const指针c指向类型为char的非const对象。您可能不会更改指针本身,但您可以更改指针所引用的对象。

声明指针和引用之间存在差异。虽然有使用术语"常量参考"严格来说,引用本身可能不一定。根据C ++语法

ptr-operator:
* attribute-specifier-seqopt cv-qualifier-seq
& attribute-specifier-seqopt

引用不包含cv-qualifier-seq。例如,这条记录

Airplane & const other

将不正确,编译器将发出错误。 至于这些记录

const Airplane & other
Airplane const & other

然后它们与等同于下面的recirds的方法相同

const char *c
char const *c

答案 1 :(得分:1)

*视为“围栏”。声明中之前的内容定义了指针引用的类型。 *定义指针本身之后的内容。对于这种情况,最容易向后读取事物(将*翻译为“指向”的指针),因此char const *t被读取(从后到前):“t是指向const char的指针” 。同样,char *const t读作:“t是指向char的const指针。”

  1. char *const表示指针本身const(无法修改),但它指向的 < strong>可以进行修改。
  2. char const *const char *彼此相同。两者都意味着指针本身可以被修改,但它指向 at 的内容不能。
  3. char代替不同的类型不会改变这个基本想法。

    引用也是如此:const T &表示对const T的引用,因此您无法修改引用的T。在引用的情况下,您不能修改引用本身以引用不同的对象,因此T & const没有任何真正的意义(并且是不允许的)。

答案 2 :(得分:0)

const适用于其左侧的类型(如果左侧没有任何内容,则适用于其右侧),因此const char *char const *相同,表示字符不能更改,但指针可以,而char * const表示字符可以更改,但指针不能

答案 3 :(得分:0)

写入const和char *的顺序实际上有所不同。如果您的标题中有const char*但源文件中有char* const,则会出现错误,因为编译器不会将这些视为相同。

const char* p表示p指向一个常量的char。我们可以改变p指向的位置,但我们永远不能改变存储在p。

的内容

char* const p表示p是一个常量指针,指向一个char。我们可以改变存储在p的内容,但是我们不能改变p指向的位置。

const char* const p表示p是指向常量char的常量指针。我们不能改变p指向的位置,也不能改变p处的内容。希望这有用!