2012-10-05 58 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(); 
} 
相關問題