Le Fractionnement Du C++ Chaînes De Caractères Sur Plusieurs Lignes (Syntaxe Du Code, Pas D'Analyse)
À ne pas confondre avec comment scinder une chaîne d'analyse sage, par exemple:
Découper une chaîne en C++?
Je suis un peu confus quant à la façon de découper une chaîne sur plusieurs lignes en c++.
Cela ressemble à une simple question, mais prenons l'exemple suivant:
#include <iostream>
#include <string>
main() {
//Gives error
std::string my_val ="Hello world, this is an overly long string to have" +
" on just one line";
std::cout << "My Val is : " << my_val << std::endl;
//Gives error
std::string my_val ="Hello world, this is an overly long string to have" &
" on just one line";
std::cout << "My Val is : " << my_val << std::endl;
}
Je me rends compte que je pouvais utiliser le std::string
append()
méthode, mais je me demandais si il y avait un plus court/plus élégant (par exemple, plus pythonlike, bien évidemment, entre guillemets triples etc. ne sont pas pris en charge en c++) de manière à briser les chaînes de caractères en c++ sur plusieurs lignes pour des raisons de lisibilité.
Un lieu où il serait particulièrement souhaitable, c'est quand vous êtes de passage à long littéraux de chaîne à une fonction (par exemple une phrase).
- Voici une information intéressante: Le C++ lexer n'est pas réellement soucieux de la façon dont de nombreuses citations vous place avant et après une chaîne de caractères à deux exceptions près. Le nombre de devis que vous utilisez doit être impair et ils doivent être identiques sur chaque côté.
""""" This is a valid string and will be parsed """""
. Cependant, il n'existe pas de propriétés particulières donné à ces chaînes, ils ont simplement de se comporter comme des guillemets simples. - Intéressant merci pour le partage que... est-il utile pour qui? Vous pourriez être en mesure de l'utiliser comme un subtil balise pour les différents groupes de chaînes dans un code externe pour l'analyse en perl/bash/python scripts. C'est tout ce que je peux penser pour le moment. 🙂
- Qui se produit simplement parce qu'il va traiter les guillemets autour de la fin comme un bouquet de chaînes vides et de les enchaîner ensemble - ce n'est pas une fonction, c'est C/C++ standard de comportement
Vous devez vous connecter pour publier un commentaire.
Ne rien mettre entre les cordes. Une partie du C++ lexing étape est de combiner adjacentes littéraux de chaîne (même avec des retours à la ligne et les commentaires) en un seul littéral.
Notez que si vous voulez un retour à la ligne dans le sens littéral, vous devez ajouter vous-même:
Si vous êtes désireux de mélanger un
#define
d constante entière dans le littéral, vous devrez utiliser les macros:Il y a une certaine étrangeté dans en raison de la façon dont le stringify processeur opérateur fonctionne, si vous avez besoin de deux niveaux de macro pour obtenir la valeur réelle de
TWO
d'être une chaîne littérale.TWO
et la"lines long"
STRINGIFY
macro ci-dessus.Sont-ils tous deux littéraux? La séparation de deux littéraux de chaîne avec des espaces blancs est la même que la concaténation:
"abc" "123"
est le même que"abc123"
. Cela s'applique à droite C et C++.Je ne sais pas si c'est une extension du CCAG, ou si c'est la norme, mais il semble que vous pouvez continuer un littéral de chaîne pour la fin de la ligne avec une barre oblique inverse (tout comme la plupart des types de lignes peut être étendu dans ce manoir en C++, par exemple, une macro s'étendant sur plusieurs lignes).
world
etthis