字符串字面值
字符串文字 包含以双引号符号括起的字符序列或转义序列。 前缀为 L 的字符串文字是 宽字符串文字。 不带前缀 L 的字符串文字是 普通 或 窄字符串文字。
窄字符串字面量的类型是 char 的数组。 宽字符串类型的数组是 wchar_t。 
窄字符串字面量的类型是 的数组。 const char 宽字符串文字的类型是 const wchar_t的数组。 两种类型都具有静态存储持续时间。
将保留字符串文字中包含的多个空格。
使用转义序列 \n 将换行符表示为字符串的一部分。 使用转义序列 \\ 将反斜杠字符表示为字符串的一部分。 您可以单独表示单引号符号,也可以使用转义序列 \'表示单引号符号。 必须使用转义序列 \" 来表示双引号。
在基本源字符集之外,允许字母和数字的通用字符名称 在 C++ 和 中处于 C99 语言级别。
在C++中,必须使用 -qlanglvl=ucs 选项进行编译,以支持通用字符名称。
当您使用 -qmacpstr 选项编译时,也接受字符串字面量的Pascal字符串形式。
请参阅以下字符串文字示例:
char titles[ ] = "Handel's \"Water Music\"";
char *temp_string = "abc" "def" "ghi"; // *temp_string = "abcdefghi\0"
wchar_t *wide_string = L"longstring";此示例说明字符串字面值中的转义序列:
#include <iostream> using namespace std;
int main () {
char *s ="Hi there! \n";
cout << s;
char *p = "The backslash character \\.";
cout << p << endl;
char *q = "The double quotation mark \".\n";
cout << q ;
} 此程序生成以下输出:Hi there! The backslash character \. The double quotation mark ".
要在下一行上继续字符串,请使用后跟可选空格和换行符 (必需) 的行连续字符 (
\ 符号)。 例如:char *mail_addr = "Last Name First Name MI Street Address \
893 City Province Postal code ";
注: 当字符串文字在程序源中多次出现时,该字符串的存储方式取决于字符串是只读的还是可写的。 缺省情况下,编译器将字符串视为只读。 XL C/C++ 可能仅为只读字符串分配一个位置; 所有出现都引用该位置。 但是,该存储区域可能受到写保护。 如果字符串是可写的,那么每次出现的字符串都有一个始终可修改的单独的不同存储位置。 可以使用 #pragma
strings 伪指令或 -qro 编译器选项来更改字符串文字的缺省存储器。
字符串并置
继续字符串的另一种方法是具有两个或更多个连续字符串。 可以并置相邻字符串字面值以生成单个字符串。 例如:
"hello " "there" //equivalent to "hello there"
"hello" "there" //equivalent to "hellothere"并置字符串中的字符保持不同。 例如,将字符串 "\xab" 和 "3" 并置以形成 "\xab3"。 但是,字符 \xab 和 3 保持不同,并且不会合并以形成十六进制字符 \xab3 。
如果宽字符串文字和窄字符串文字相邻,如以下示例中所示:
"hello " L"there" 结果是一个宽字符串字面值。备注 :
在 C99 中,窄字符串可以与宽字符串字面值连接。
在 C++11 中, C99 预处理器对字符串连接进行了修改,为C和C++编译器提供了一个通用的预处理器接口。 窄字符串可以与 C++11中的宽字符串字面值并置。 欲了解更多信息,请参阅 C++11 ( C++11 )中采用的 C99 预处理器功能。
在 C99 中,窄字符串可以与宽字符串字面值连接。
在 C++11 中, C99 预处理器对字符串连接进行了修改,为C和C++编译器提供了一个通用的预处理器接口。 窄字符串可以与 C++11中的宽字符串字面值并置。 欲了解更多信息,请参阅 C++11 ( C++11 )中采用的 C99 预处理器功能。
在任何并置之后,'\0'类型为
char 的字符串将追加到每个字符串的末尾。 对于宽字符串文字,'\0'将追加类型为 wchar_t 的值。 根据约定,程序通过查找空字符来识别字符串的结尾。 例如:char *first = "Hello "; //stored as "Hello \0"
char *second = "there"; //stored as "there\0"
char *third = "Hello " "there"; //stored as "Hello there\0" 