[ Web Proxy ]
URL:
Viewing: http://ja.cppreference.com/cpp/string/basic_string/basic_string [Back]  [Original]

std::basic_string<CharT,Traits,Allocator>::basic_string - cppreference.com
cppreference.com

std::basic_string<CharT,Traits,Allocator>::basic_string

: cppreference.com
 
C++
(C++20)
(C++20)
(C++17)
(C++11)
(C++11)
(C++11)
 
 
std::basic_string
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
(1)
basic_string(); explicit basic_string( const Allocator& alloc );
(C++17)
basic_string() noexcept(noexcept( Allocator() )) : basic_string( Allocator() ) {} explicit basic_string( const Allocator& alloc ) noexcept;
(C++17)
(C++20)
constexpr basic_string() noexcept(noexcept( Allocator() )) : basic_string( Allocator() ) {} explicit constexpr basic_string( const Allocator& alloc ) noexcept;
(C++20)
(2)
basic_string( size_type count, CharT ch, const Allocator& alloc = Allocator() );
(C++20)
constexpr basic_string( size_type count, CharT ch, const Allocator& alloc = Allocator() );
(C++20)
(3)
basic_string( const basic_string& other, size_type pos, size_type count = std::basic_string::npos, const Allocator& alloc = Allocator() );
(C++17)
basic_string( const basic_string& other, size_type pos, const Allocator& alloc = Allocator() );
(C++17)
(C++20)
constexpr basic_string( const basic_string& other, size_type pos, const Allocator& alloc = Allocator() );
(C++20)
(3)
basic_string( const basic_string& other, size_type pos, size_type count, const Allocator& alloc = Allocator() );
(C++17)
(C++20)
constexpr basic_string( const basic_string& other, size_type pos, size_type count, const Allocator& alloc = Allocator() );
(C++20)
(4)
basic_string( const CharT* s, size_type count, const Allocator& alloc = Allocator() );
(C++20)
constexpr basic_string( const CharT* s, size_type count, const Allocator& alloc = Allocator() );
(C++20)
(5)
basic_string( const CharT* s, const Allocator& alloc = Allocator() );
(C++20)
constexpr basic_string( const CharT* s, const Allocator& alloc = Allocator() );
(C++20)
(6)
template< class InputIt > basic_string( InputIt first, InputIt last, const Allocator& alloc = Allocator() );
(C++20)
template< class InputIt > constexpr basic_string( InputIt first, InputIt last, const Allocator& alloc = Allocator() );
(C++20)
(7)
basic_string( const basic_string& other );
(C++20)
constexpr basic_string( const basic_string& other );
(C++20)
(7)
basic_string( const basic_string& other, const Allocator& alloc );
(C++11)
(C++20)
constexpr basic_string( const basic_string& other, const Allocator& alloc );
(C++20)
(8)
basic_string( basic_string&& other ) noexcept;
(C++11)
(C++20)
constexpr basic_string( basic_string&& other ) noexcept;
(C++20)
(8)
basic_string( basic_string&& other, const Allocator& alloc );
(C++11)
(C++20)
constexpr basic_string( basic_string&& other, const Allocator& alloc );
(C++20)
(9)
basic_string( std::initializer_list<CharT> ilist, const Allocator& alloc = Allocator() );
(C++11)
(C++20)
constexpr basic_string( std::initializer_list<CharT> ilist, const Allocator& alloc = Allocator() );
(C++20)
(10)
template < class T > explicit basic_string( const T& t, const Allocator& alloc = Allocator() );
(C++17)
(C++20)
template < class T > explicit constexpr basic_string( const T& t, const Allocator& alloc = Allocator() );
(C++20)
(11)
template < class T > basic_string( const T& t, size_type pos, size_type n, const Allocator& alloc = Allocator() );
(C++17)
(C++20)
template < class T > constexpr basic_string( const T& t, size_type pos, size_type n, const Allocator& alloc = Allocator() );
(C++20)

alloc

1) ()
2) ch count Allocator (C++17)
3) other [pos, pos+count) count == npos count [pos, other.size())
4) s count s count [s, s + count)
5) s [s, s + Traits::length(s)) ( s ) Allocator (C++17)
6) [first, last)

InputIt basic_string(static_cast<size_type>(first), static_cast<value_type>(last), a)

(C++11)

InputIt LegacyInputIterator

(C++11)
7) other
8) other other
9) ilist
10) std::basic_string_view<CharT, Traits> sv = t; t sv basic_string(sv.data(), sv.size(), alloc) sv std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> true std::is_convertible_v<const T&, const CharT*> false
11) std::basic_string_view<CharT, Traits> sv = t; t sv basic_string(sv.substr(pos, n), a) sv [pos, pos + n) std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> true

alloc -
count -
ch -
pos -
first, last -
s -
other -
ilist - std::initializer_list
t - (std::basic_string_view )

1)
2-4) count
5) s
6) first last
7) other
8) alloc alloc != other.get_allocator()
9) ilist

3) pos > other.size() std::out_of_range
8) alloc == str.get_allocator()

max_size() ( (2) count > max_size() ) std::length_error Allocator::allocate

'\0' (5) operator""s

std::string s1 = "ab\0\0cd";   // s1 contains "ab"
std::string s2{"ab\0\0cd", 6}; // s2 contains "ab\0\0cd"
std::string s3 = "ab\0\0cd"s;  // s3 contains "ab\0\0cd"

C++

DR
LWG 2193 C++11 the default constructor is explicit made non-explicit
LWG 2946 C++17 string_view overload causes ambiguity in some cases avoided by making it a template
LWG 3076 C++17 two constructors may cause ambiguities in class template argument deduction constrained

#include <iostream>
#include <cassert>
#include <iterator>
#include <string>
#include <cctype>

int main()
{
  {
    // string::string()
    std::string s;
    assert(s.empty() && (s.length() == 0) && (s.size() == 0));
  }

  {
    // string::string(size_type count, charT ch)
    std::string s(4, '=');
    std::cout << s << '\n'; // "===="
  }

  {
    std::string const other("Exemplary");
    // string::string(string const& other, size_type pos, size_type count)
    std::string s(other, 0, other.length()-1);
    std::cout << s << '\n'; // "Exemplar"
  }

  {
    // string::string(charT const* s, size_type count)
    std::string s("C-style string", 7);
    std::cout << s << '\n'; // "C-style"
  }

  {
    // string::string(charT const* s)
    std::string s("C-style\0string");
    std::cout << s << '\n'; // "C-style"
  }

  {
    char mutable_c_str[] = "another C-style string";
    // string::string(InputIt first, InputIt last)
    std::string s(std::begin(mutable_c_str)+8, std::end(mutable_c_str)-1);
    std::cout << s << '\n'; // "C-style string"
  }

  {
    std::string const other("Exemplar");
    std::string s(other);
    std::cout << s << '\n'; // "Exemplar"
  }

  {
    // string::string(string&& str)
    std::string s(std::string("C++ by ") + std::string("example"));
    std::cout << s << '\n'; // "C++ by example"
  }

  {
    // string(std::initializer_list<charT> ilist)
    std::string s({ 'C', '-', 's', 't', 'y', 'l', 'e' });
    std::cout << s << '\n'; // "C-style"
  }

  {
    // overload resolution selects string(InputIt first, InputIt last) [with InputIt = int]
    // which behaves as if string(size_type count, charT ch) is called
    std::string s(3, std::toupper('a'));
    std::cout << s << '\n'; // "AAA"
  }
}

:

====
Exemplar
C-style
C-style
C-style string
Exemplar
C++ by example
C-style
AAA


() [edit]

() [edit]
(C++11)
string
() [edit]
wstring
() [edit]

Web Proxy Viewer  |  New URL  |  Original Page