Le passage des chaînes par référence et la valeur en C++

Je veux déclarer une chaîne de caractères, l'initialiser par le passage par référence, et ensuite de le passer par la valeur de l'outputfile fonction.

Le code ci-dessous fonctionne, mais je ne sais pas pourquoi. Dans le principal je m'attends à passer le string 'nom de fichier' comme

startup(&filename)

Mais qui donne une erreur, et le code ci-dessous ne fonctionne pas. Pourquoi? Aussi, est-il une meilleure façon de le faire sans l'aide d'une valeur de retour?

#include <iostream>
#include <string>
using namespace std;
void startup(std::string&);
void outputfile(std::string);
int main()
{
    std::string filename;
    startup(filename);
    outputfile(filename);
}   
void startup(std::string& name)
{
    cin >> name;
}
void outputfile(std::string name)
{
    cout << name;
}
  • &filename crée un pointeur. Les pointeurs et les références sont incompatibles.
  • Pourquoi ne veux-tu pas utiliser une valeur de retour?
  • Le code "fonctionne" parce que c'est exactement ce que vous avez décrit. dans votre phrase d'ouverture, et fait si bien. Concernant l'erreur avec &filename, il ne devrait pas compiler, car une référence n'est pas un pointeur. Voir cette question et les réponses. quant à leurs différences et leurs similitudes.
InformationsquelleAutor Peter | 2015-02-08