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'; }- 这会导致程序崩溃.为什么?
对不起我的无知.
为什么不行
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中不再有效.