1
char s[] = "hello world";
char s[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', 0};

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

4

4 回答 4

5

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

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

忽略这些差异,无论哪种方式,您最终在数组中得到的结果都是相同的。

于 2012-11-06T23:53:21.917 回答
3

是的,它们是等价的,但它是 C,而不是 C++。

于 2012-11-06T23:43:09.730 回答
2

如果您忘记了第二个更难写的事实,那么它们是相同的!

于 2012-11-06T23:43:32.710 回答
1

差不多……是的。两者都是可变的并以空字符终止。

除了第一个被隐式终止。

于 2012-11-06T23:43:07.340 回答