C++ 字符串声明
当我以以下方式声明时,字符串声明有效:C++ 字符串声明,c++,string,pointers,stl,C++,String,Pointers,Stl,当我以以下方式声明时,字符串声明有效: string a = "xyz"; char a[] = "xyz"; 但在下列情况下: char *a = "xyz"; 它在g++4.9.2编译器中给出了一个错误: 警告:已弃用从字符串常量到“char*”的转换 [-Wwrite strings]char*a=“xyz” 我认为这三种声明类型彼此不同。请帮帮我 string a = "xyz"; 这使用初始值设定项语法调用构造函数std::string(const char*) 这声明了一个足够
string a = "xyz";
char a[] = "xyz";
但在下列情况下:
char *a = "xyz";
它在g++4.9.2编译器中给出了一个错误:
警告:已弃用从字符串常量到“char*”的转换
[-Wwrite strings]char*a=“xyz”
我认为这三种声明类型彼此不同。请帮帮我
string a = "xyz";
这使用初始值设定项语法调用构造函数std::string(const char*)
这声明了一个足够大的数组来存储字符串和终止符。它遵循标准数组初始值设定项规则。把它想象成相当于chara[]={'x','y','z','\0'}代码>
char *a = "xyz";
这将获取字符串文本(“xyz”
)并将其分配给非常量指针。在语言中,这样的指针意味着可以修改它所指向的字符串,但在本例中这是未定义的行为,因为不能修改字符串文本。为了防止您犯这样的错误,编译器会给您一个警告。以下内容有效,不会发出警告:
const char *a = "xyz";
这使用初始值设定项语法调用构造函数std::string(const char*)
这声明了一个足够大的数组来存储字符串和终止符。它遵循标准数组初始值设定项规则。把它想象成相当于chara[]={'x','y','z','\0'}代码>
char *a = "xyz";
这将获取字符串文本(“xyz”
)并将其分配给非常量指针。在语言中,这样的指针意味着可以修改它所指向的字符串,但在本例中这是未定义的行为,因为不能修改字符串文本。为了防止您犯这样的错误,编译器会给您一个警告。以下内容有效,不会发出警告:
const char *a = "xyz";
在该语言的早期版本中,您可以使用:
char* a = "xyz";
现在,您必须使用:
char const* a = "xyz";
字符串文本,例如“xyz”
驻留在程序的rea-only部分中。它可以用来初始化char const*
,因为您不应该修改char const*
指向的内容。使用它初始化char*
会打开用户意外修改它们的可能性。此外,修改这些字符串是导致未定义行为的原因
字符串文字也可用于初始化char[]
。在这种情况下,字符串文本被复制到为数组分配的空间。因此,不存在修改程序只读数据的风险。因此,使用
char a[] = "xyz";
没关系
线路
string a = "xyz";
调用string
的构造函数,该构造函数接受char常量*
,然后使用该对象初始化a
。因此,该行也可以。在该语言的早期版本中,您可以使用:
char* a = "xyz";
现在,您必须使用:
char const* a = "xyz";
字符串文本,例如“xyz”
驻留在程序的rea-only部分中。它可以用来初始化char const*
,因为您不应该修改char const*
指向的内容。使用它初始化char*
会打开用户意外修改它们的可能性。此外,修改这些字符串是导致未定义行为的原因
字符串文字也可用于初始化char[]
。在这种情况下,字符串文本被复制到为数组分配的空间。因此,不存在修改程序只读数据的风险。因此,使用
char a[] = "xyz";
没关系
线路
string a = "xyz";
调用string
的构造函数,该构造函数接受char常量*
,然后使用该对象初始化a
。因此,这句话也可以。我不明白为什么这个答案被否决了。它清晰、正确,甚至提供了一点历史。@paddy,我也是。希望他们能解释:)RSahu和@paddy这两个答案都能帮助我理解这个问题。感谢您的回复。:)@biswasJUCSE,很高兴我们能提供帮助。我不明白为什么这个答案被否决了。它清晰、正确,甚至提供了一点历史。@paddy,我也是。希望他们能解释:)RSahu和@paddy这两个答案都能帮助我理解这个问题。感谢您的回复。:)@biswasJUCSE,很高兴我们能提供帮助。这是一个警告,不是一个错误。“警告”这个词就是线索。这是警告,不是错误。“警告”一词就是线索。