7

C / C ++では、次の2行のコードの違いは何ですか。

char *str1="hello";  
char *str2={"hello"};  
4

4 に答える 4

10

2011 C標準、条項6.7.9初期化、段落11によると、「スカラーの初期化子は単一の式であり、オプションで中括弧で囲まれている必要があります…」</ p>

それだ。セマンティックな違いはありません。中括弧は、意味を変更せずに、単に存在する場合と存在しない場合があります。

于 2012-10-05T13:10:59.523 に答える
6

この場合のみスタイルを設定します。どちらも同じ結果になり、どちらも悪い形です。を使用する必要がありますconst char * str1="hello";

于 2012-10-05T13:02:20.410 に答える
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();
}
于 2012-10-05T13:10:39.650 に答える
-1

文字列は文字の配列であるため、配列と「文字列」の間に違いはありません。

于 2012-10-05T13:06:39.553 に答える