最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<regex>

# std::basic_regex::operator=(C++11)

    basic_regex& operator=(const basic_regex& e);                   // (1)

    basic_regex& operator=(basic_regex&& e) noexcept;               // (2)

    basic_regex& operator=(const charT* ptr);                       // (3)

    basic_regex& operator=(initializer_list<charT> il);             // (4)

    template <class ST, class SA>
    basic_regex& operator=(const basic_string<charT, ST, SA>& p);   // (5)

## 概要

正規表現オブジェクトを代入する。

## 要件

- `ptr` はヌルポインタではないこと。

## 効果

- (1) コピー代入演算子。`assign(e)` と等価。
- (2) ムーブ代入演算子。`assign(move(e))` と等価。
- (3) `assign(ptr)` と等価。
- (4) `assign(il.begin(), il.end())` と等価。
- (5) `assign(p)` と等価。

## 戻り値

`*this`

## 例

    #include <iostream>
    #include <regex>
    #include <string>

    int main()
    {
      const char s[] = " abc ";
      std::regex re;
      std::cout << std::boolalpha;

      const std::regex re1("\\w+");
      re = re1;                                             // (1) の形式
      std::cout << std::regex_search(s, re) << std::endl;

      re = std::regex("\\d+");                              // (2) の形式
      std::cout << std::regex_search(s, re) << std::endl;

      re = "\\w+";                                          // (3) の形式
      std::cout << std::regex_search(s, re) << std::endl;

      re = { '\\', 'd', '+' };                              // (4) の形式
      std::cout << std::regex_search(s, re) << std::endl;

      const std::string p = "\\w+";
      re = p;                                               // (5) の形式
      std::cout << std::regex_search(s, re) << std::endl;
    }

### 出力

    true
    false
    true
    false
    true

## バージョン

### 言語

- C++11

### 処理系

- Clang: 3.0 ✅, 3.1 ✅, 3.2 ✅, 3.3 ✅, 3.4 ✅, 3.5 ✅, 3.6 ✅
- GCC: 4.9.0 ✅, 4.9.1 ✅, 4.9.2 ✅, 5.0.0 ✅
- ICC: ??
- Visual C++: ??

### 備考

Clang バージョン 3.0 は `initializer_list` に対応していないため、(4) の形式は提供されていない。
また、Clang(libc++) では例外が発生した場合に `*this` が元の状態を保持せずに中途半端に更新されてしまう。