等效C字符串的语法不同?

Jor*_*dan 1 c++ arrays string null character

char s[] = "hello world";
char s[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', 0};
Run Code Online (Sandbox Code Playgroud)

这两行代码在C++中是等效的吗?

Set*_*gie 5

不,第一个通过从存储在静态存储器中的字符串文字进行复制来初始化数组.第二个是从数组初始化列表初始化的,可能不会在静态内存中创建任何内容,但会生成指令以将常数(指令的内在数字)移动到数组中的每个位置.

另外,如果两件事情是平等的,那么对它们应用相同的转换也将导致相等.但是,将两者都更改为指针而不是数组(并添加const)将阻止具有初始化列表的那个进行编译,因此它们会进一步区别.

忽略这些差异,你在数组中最终得到的结果将是相同的.

  • +1:验证GCC 3.4.4 - 生成`{...}`方法`movb $ 104,-40(%ebp); movb $ 101,-39(%ebp)`等将字符逐个字符复制到本地缓冲区(无论是否没有优化或在`-O3`). (2认同)