Interpolering av en streng

C++:
Interpolering av en streng

How to:

I C++20 har vi std::format, som lar oss formatere og interpolere strenger på en lignende måte som i Python.

#include <format>
#include <iostream>

int main() {
    int age = 30;
    std::string name = "Ola";
    std::string greeting = std::format("Hei, {}! Du er {} år gammel.", name, age);
    std::cout << greeting << std::endl;
    return 0;
}

Output:

Hei, Ola! Du er 30 år gammel.

Før C++20 var vi ofte avhengig av stringstream eller kople strenger og variabler sammen med +.

#include <sstream>
#include <iostream>
#include <string>

int main() {
    int age = 30;
    std::string name = "Ola";
    
    std::ostringstream oss;
    oss << "Hei, " << name << "! Du er " << age << " år gammel.";
    std::string greeting = oss.str();
    
    std::cout << greeting << std::endl;
    return 0;
}

Output:

Hei, Ola! Du er 30 år gammel.

Deep Dive

Før std::format i C++20, var strenginterpolasjon mer tungvint. Vi brukte std::ostringstream eller gamle C-stil sprintf, som var mindre sikker og ga rom for feil. std::format er inspirert av Python’s f-strings og .format, og det gir en type-sikker og leser-vennlig måte å formatere strenger på.

Alternativer eksisterer, inkludert boost::format for eldre prosjekter, eller bruk av biblioteker som fmt, som std::format faktisk er basert på.

Implementasjonsdetaljer: std::format håndterer forskjellige datatyper og kompliserte objekter ved å kreve at de har en tilpasset formatter funksjon om nødvendig. Det bruker også “{}” for plassholdere og lar deg spesifisere detaljer som bredde, padding, og presisjon.

See Also