std:: cadena vs cadena en c++ [duplicado]


Posibles Duplicados:
¿Por qué 'usar espacio de nombres std;' se considera una mala práctica en C++?
Usando el Espacio de nombres std

He estado rondando por un montón de foros diferentes y parece que veo esto aparecer cada vez y otra vez. Es una pregunta muy principiante.

Normalmente defino un programa con

#include<string>
using namespace std;

string x;

Veo un montón de ejemplos de código por ahí que definen una cadena como

std::string.

¿Cuál es el propósito de esto? ¿es una buena práctica o tiene alguna funcionalidad?

Author: Community, 2011-03-31

5 answers

Como ya se indicó en la otra respuesta, usar std:: es necesario a menos que importe todo el espacio de nombres std o std::string (ver más abajo).

En mi opinión es mejor usar std::string en lugar de string ya que muestra explícitamente que es una std::string y no alguna otra implementación de cadena.

Si prefieres escribir solo string, te sugiero que uses using std::string; en lugar de using namespace std; para importar solo las cosas en el espacio de nombres global que realmente necesitas.

 37
Author: ThiefMaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 11:40:01

El nombre completo de string es std::string porque reside en namespace std, el espacio de nombres en el que residen todas las funciones, clases y objetos de la biblioteca estándar de C++.

En su código, ha agregado explícitamente la línea using namespace std;, que le permite usar cualquier cosa del espacio de nombres estándar sin usar el prefijo std::. Por lo tanto, puede referirse a std::string (el nombre real del tipo de cadena) usando la abreviatura string ya que el compilador sabe que debe buscarlo en namespace std.

No hay funcionalidad diferencia entre string y std::string porque son del mismo tipo. Dicho esto, hay momentos en los que preferirías std::string sobre string. Por ejemplo, en un archivo de encabezado, generalmente no se considera una buena idea poner la línea using namespace std; (o usar cualquier espacio de nombres, para el caso) porque puede causar que los nombres en los archivos que incluyen ese encabezado se vuelvan ambiguos. En esta configuración, simplemente #include <string> en el encabezado, luego use std::string para referirse al tipo de cadena. Del mismo modo, si alguna vez hubo alguna ambigüedad entre std::string y algún otro tipo string, usar el nombre std::string eliminaría la ambigüedad.

Si se incluye o no la línea using namespace std; en absoluto es un tema algo controvertido y muchos programadores están fuertemente a favor o en contra. Sugiero usar cualquier cosa con la que te sientas cómodo y asegurarte de adoptar cualquier convención de codificación que se use al trabajar en un proyecto grande.

 10
Author: templatetypedef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 11:41:27

Como ssteinberg dijo que es lo mismo. Pero solo sintácticamente.

Desde mi experiencia, es más útil usar el nombre completo

std::string 

Donde sea que lo necesite, o agregue un

using std::string;

Al principio de su archivo fuente.

La ventaja es que de esta manera las dependencias de su archivo fuente son más observables. Si añade un

using namespace std;

Significa que su código puede depender de cualquier cosa dentro de ese espacio de nombres.

 3
Author: Assambar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:21

Si no son using el namespace std, entonces tienen que especificar a qué cadena de espacio de nombres pertenecen usando std::string

 1
Author: MByD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 11:40:13

Si tienes using namespace std; antes de tu código es lo mismo.

 -1
Author: ssteinberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 11:38:32