2012-10-05 78 views
7

En C/C++, ¿cuál es la diferencia entre el código de dos líneas siguientes:¿Cuál es la diferencia entre "hola" y {"hola"}?

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

ninguna diferencia. ambos rompen la compilación –

+3

@ BЈовић Al menos en C++, pero no en C (y quién sabe qué * "C/C++" * es). –

+0

@ChristianRau - Sé exactamente lo que significa "C/C++", y sospecho que tú también. –

Respuesta

10

por la norma 2011 C, cláusula 6.7 .9 Inicialización, párrafo 11: "El inicializador de un escalar debe ser una expresión única, opcionalmente encerrado entre llaves ..."

Eso es todo. No hay diferencia semántica; las llaves simplemente pueden estar presentes o pueden estar ausentes, sin ningún cambio en el significado.

6

estilo sólo en este caso. Ambos dan como resultado lo mismo, y ambos tienen mala forma. Deberías haber usado const char * str1="hello";.

+0

{"hello"} ¿no se considera matriz? como sabemos para definir la matriz que escribimos en {} m simplemente confunda esto y qué si char * str2 = {"hello", "hola"}; en este caso – Pratik

+0

@Pratik, todos los tipos escalares también aceptan inicializadores '{}'. –

+0

@JensGustedt Por favor, ¿cuál es la definición de los tipos escalares? – yejinxin

-1

No hay diferencia entre una matriz y una "cadena", ya que una cadena es una matriz de caracteres.

2

Ver https://stackoverflow.com/a/3462768/153225.

Las llaves son redundantes.

Generating ensamblador formar el siguiente código con "gcc -S" confirma que generan exactamente lo mismo (con una constante ligeramente diferente en cada caso):

#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(); 
}