2012-10-05 29 views
7

在C/C++,什么是以下两个代码行之间的区别:“hello”和{“hello”}有什么区别?

char *str1="hello"; 
char *str2={"hello"}; 
+1

没有区别。它们都破坏了编译 –

+3

@BЈовић至少在C++中,但不在C中(谁知道*“C/C++”*是什么)。 –

+0

@ChristianRau - 我确切地知道“C/C++”是什么意思,我怀疑你也这么做。 –

回答

10

每2011 C标准中第6.7 .9初始化,第11段:“标量的初始值应该是一个单一的表达式,可选地用大括号括起来......”

就是这样。没有语义上的差异;大括号可以简单地存在或可以不存在,而不改变含义。

6

风格只有在这种情况下。他们都导致同样的事情,他们都是不好的形式。你应该使用const char * str1="hello";

+0

{“hello”}是不是认为是数组?正如我们所知,要定义我们在{}中编写的数组,只是混淆了这一点,如果char * str2 = {“hello”,“hi”};在这种情况下,@Pratik – Pratik

+0

,所有标量类型也接受'{}'初始值设定项。 –

+0

@JensGustedt请问标量类型的定义是什么? – yejinxin

-1

由于字符串是一个字符数组,因此数组和字符串之间没有区别。

2

请参阅https://stackoverflow.com/a/3462768/153225

大括号是多余的。

生成汇编形成具有“GCC -S”下面的代码证实它们生成完全一样的东西(在每种情况下一个稍微不同的常数):

#include <iostream> 
using namespace std; 

void test1() { 
    const char *str1="hello1"; 
    cout << str1 << endl; 
} 

void test2() { 
    const char *str2={"hello2"}; 
    cout << str2 << endl; 
} 

int main() { 
    test1(); 
    test2(); 
} 
相关问题