在C/C++中,以下的几种字符串指针初始化的方式都是合法的。

char str1[10]="welcome";  
//char str2="welcome"; //error: invalid conversion from 'const char*' to 'char'  
char str3[10]={"welcome"};  
char *str4="welcome";  
char *str5={"welcome"};

看起来,str3和str5貌似是会编译不过的,实则不然。

在C++11标准中,提供了与C语言一致的初始化功能。对于标量类型的初始化,大括号是可选的,即int a=0;int a={0};是等价的。

str5是指针类型,属性标量类型,因此其初始化是合法的。对于str3,是数组类型,不属于标量类型,不过编译器选择支持类似的初始化方式,或许是为了统一方便用法吧。

更多参考

C++初始化与赋值

C++ 11新特性

scalar types 初始化

本文出自夜惊心的博客,转载请保留出处
blog comments powered by Disqus