Namespaces
Variants

std::filesystem::path:: concat, std::filesystem::path:: operator+=

From es.cppreference.net
path & operator + = ( const path & p ) ;
(1) (desde C++17)
path & operator + = ( const string_type & str ) ;
path & operator + = ( std:: basic_string_view < value_type > str ) ;
(2) (desde C++17)
path & operator + = ( const value_type * ptr ) ;
(3) (desde C++17)
path & operator + = ( value_type x ) ;
(4) (desde C++17)
template < class CharT >
path & operator + = ( CharT x ) ;
(5) (desde C++17)
template < class Source >
path & operator + = ( const Source & source ) ;
(6) (desde C++17)
template < class Source >
path & concat ( const Source & source ) ;
(7) (desde C++17)
template < class InputIt >
path & concat ( InputIt first, InputIt last ) ;
(8) (desde C++17)

Concatena la ruta actual y el argumento

1-3,6,7) Anexa path ( p ) . native ( ) al nombre de ruta almacenado en * this en el formato nativo. Esto manipula directamente el valor de native ( ) y puede no ser portable entre sistemas operativos.
4,5) Lo mismo que return * this + = std:: basic_string_view ( & x, 1 ) ; .
8) Igual que return * this + = path ( first, last ) ; .

(6) y (7) participan en la resolución de sobrecarga solo si Source y path no son del mismo tipo, y se cumple alguna de las siguientes condiciones:

Contenidos

Parámetros

p - ruta a añadir
str - cadena o string view a añadir
ptr - puntero al inicio de una cadena terminada en nulo a añadir
x - carácter individual a añadir
source - std::basic_string , std::basic_string_view , cadena multibyte terminada en nulo, o un iterador de entrada que apunta a una secuencia multibyte terminada en nulo, que representa un nombre de ruta (ya sea en formato portable o nativo)
first, last - par de LegacyInputIterator s que especifican una secuencia multibyte que representa un nombre de ruta
Requisitos de tipo
-
InputIt debe cumplir con los requisitos de LegacyInputIterator .
-
El tipo de valor de InputIt debe ser uno de los tipos de caracteres codificados ( char , wchar_t , char16_t y char32_t ).
-
CharT debe ser uno de los tipos de caracteres codificados ( char , wchar_t , char16_t y char32_t ).

Valor de retorno

* this

Excepciones

Puede lanzar std:: bad_alloc si falla la asignación de memoria.

Notas

A diferencia de append() o operator/= , nunca se introducen separadores de directorio adicionales.

Ejemplo

#include <filesystem>
#include <iostream>
#include <string>
int main()
{
    std::filesystem::path p1; // una ruta vacía
    p1 += "var"; // no inserta un separador
    std::cout << R"("" + "var" --> )" << p1 << '\n';
    p1 += "lib"; // no inserta un separador
    std::cout << R"("var" + "lib" --> )" << p1 << '\n';
    auto str = std::string{"1234567"};
    p1.concat(std::begin(str) + 3, std::end(str) - 1);
    std::cout << "p1.concat --> " << p1 << '\n';
}

Salida:

"" + "var" --> "var"
"var" + "lib" --> "varlib"
p1.concat --> "varlib456"

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3055 C++17 la especificación para concatenar un solo carácter estaba mal formada se hizo bien formada
LWG 3244 C++17 faltaba la restricción de que Source no puede ser path añadida

Véase también

agrega elementos a la ruta con un separador de directorio
(función miembro pública)
(C++17)
concatena dos rutas con un separador de directorio
(función)