const char * en paramètre de la fonction en C++

NOTE: je sais qu'il y a de nombreuses questions qui en ont parlé, mais je suis encore un débutant et je ne pouvais pas comprendre les exemples.

J'ai eu un prototype de fonction qui va comme ceci:

int someFunction(const char * sm);

Ici, comme vous le savez, const char* signifie que cette fonction peut accepter const ou non-const de pointeur vers char. J'ai essayé quelque chose comme ça dans le corps de la fonction:

someMemberVar = sm;

someMemberVar est juste un pointeur vers char. Le compilateur me donne une erreur me disant:
impossible de convertir de const char* char*.

Ici, je n'avais pas passer une constante, de sorte que soit sm ou someMemberVar ne sont pas constantes. Donc, ce constant, le compilateur est en train de parler?

  • Comment exactement est someMemberVar déclaré, et quel est le message d'erreur exact que vous obtenez (celui que vous fournissez ne fait aucun sens, donc je pense qu'il y est une faute de frappe là).
  • J'ai corrigé mon erreur. Elle est déclarée comme ça: char * someMemberVar;
  • il est la plupart du temps correct. char* peut être en toute sécurité en fonte à const char*, de sorte que vous pouvez passer un char* à cette méthode, tout comme vous le feriez d'un const char*. Le compilateur va juste faire le casting pour vous.
  • Non, il peut accepter const char * ou char *. Il va les traiter comme si elles étaient const char *. Vous avez besoin d'un cast explicite pour changer un const type de données à un non-const, mais pas dans l'autre sens. Après tout, juste parce que une variable peut être écrit pour ne pas dire que j'ai du changer sa valeur.
  • Si vous avez besoin de comprendre ce qui se passe ici, pour d'autres raisons, la solution réelle, il est probable que vous voulez est de faire someMemberVar un std::string. Surtout quand vous êtes en train d'apprendre les rudiments de la langue, les variables qui détiennent des valeurs (comme int, string, etc.) sont plus faciles à utiliser. Après avoir appris la langue, ils sont encore plus faciles à utiliser (parce que vous /souhaitez/ pour contenir une valeur, la plupart du temps).
InformationsquelleAutor Loai Nagati | 2009-10-30