C / C ++では、次の2行のコードの違いは何ですか。
char *str1="hello";
char *str2={"hello"};
C / C ++では、次の2行のコードの違いは何ですか。
char *str1="hello";
char *str2={"hello"};
2011 C標準、条項6.7.9初期化、段落11によると、「スカラーの初期化子は単一の式であり、オプションで中括弧で囲まれている必要があります…」</ p>
それだ。セマンティックな違いはありません。中括弧は、意味を変更せずに、単に存在する場合と存在しない場合があります。
この場合のみスタイルを設定します。どちらも同じ結果になり、どちらも悪い形です。を使用する必要がありますconst char * str1="hello";
。
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();
}
文字列は文字の配列であるため、配列と「文字列」の間に違いはありません。