c ++ char*在构造函数中初始化

tuk*_*uks 2 c++ constructor initialization char

我只是很好奇,我想知道这里发生了什么:

class Test
{
char * name;
public:
Test(char * c) : name(c){}
};
Run Code Online (Sandbox Code Playgroud)

1)为什么Test(const char * c) : name(c){}不起作用?因为char * name不是常量?但是这个怎么样:

main(){
char * name = "Peter";
}
Run Code Online (Sandbox Code Playgroud)

name是char*,但是"Peter"const char*,对吗?那么初始化是如何工作的呢?

2)Test(char * c) : name(c){ c[0] = 'a'; }- 这会导致程序崩溃.为什么?

对不起我的无知.

Eit*_*n T 7

为什么不行Test(const char * c) : name(c) {} ?因为char * name不是const吗?

正确.

这个初始化是如何工作的: char * name = "Peter";

C++字符串文字是类型的char const[](参见此处,而不是仅仅char[]在C中,因为它没有const关键字1).此分配在C++中被认为已弃用,但为了向后兼容C,仍然允许2.

Test(char * c) : name(c) { c[0] = 'a'; }崩溃程序.为什么?

Test初始化时你传递给什么?如果您传递的是字符串文字或非法指针,c[0] = 'a'则不允许执行此操作.


1旧版本的C编程语言(如1978年出版的K&R书中所述)不包括const关键字.从那以后,ANSI C借用了constC++ 的思想.
2在C++ 03中有效,在C++ 11中不再有效.