std::valarray<T>::operator=
來自 cppreference.com
valarray<T>& operator=( const valarray<T>& other ); |
(1) | |
valarray<T>& operator=( valarray<T>&& other ) noexcept; |
(2) | (C++11 起) |
valarray<T>& operator=( const T& val ); |
(3) | |
valarray<T>& operator=( const std::slice_array<T>& other ); |
(4) | |
valarray<T>& operator=( const std::gslice_array<T>& other ); |
(5) | |
valarray<T>& operator=( const std::mask_array<T>& other ); |
(6) | |
valarray<T>& operator=( const std::indirect_array<T>& other ); |
(7) | |
valarray<T>& operator=( std::initializer_list<T> il ); |
(8) | (C++11 起) |
替換數值陣列的內容。
1) 複製賦值運算子。如果 size() != other.size(),首先像透過 resize(other.size()) 那樣調整 *this 的大小。將 *this 的每個元素賦值為 other 相應元素的值。
2) 移動賦值運算子。用 other 的內容替換 *this 的內容。操作後 other 的值未指定。如果 T 具有非平凡解構函式,此操作的複雜度可能是線性的,否則通常為常數。
3) 用 val 的副本替換 *this 中的每個值。
8) 賦值初始化列表 il 的內容。等價於 *this = valarray(il)。
目錄 |
[編輯] 引數
其他 | - | 要賦值的另一個數值陣列(或掩碼) |
val | - | 用於初始化每個元素的值 |
il | - | 要賦值的初始化列表 |
[編輯] 返回值
*this
[編輯] 異常
1,3-8) 可能丟擲實現定義的異常。
[編輯] 示例
執行此程式碼
#include <iomanip> #include <iostream> #include <valarray> void print(const char* rem, const std::valarray<int>& v) { std::cout << std::left << std::setw(36) << rem << std::right; for (int n : v) std::cout << std::setw(3) << n; std::cout << '\n'; } int main() { std::valarray<int> v1(3); v1 = -1; // (3) from a scalar print("assigned from scalar: ", v1); v1 = {1, 2, 3, 4, 5, 6}; // (8): from initializer list of different size print("assigned from initializer_list:", v1); std::valarray<int> v2(3); v2 = v1[std::slice(0, 3, 2)]; // (4): from slice array print("every 2nd element starting at pos 0:", v2); v2 = v1[v1 % 2 == 0]; // (6): from mask array print("values that are even:", v2); std::valarray<std::size_t> idx = {0, 1, 2, 4}; // index array v2.resize(4); // sizes must match when assigning from gen subscript v2 = v1[idx]; // (7): from indirect array print("values at positions 0, 1, 2, 4:", v2); }
輸出
assigned from scalar: -1 -1 -1 assigned from initializer_list: 1 2 3 4 5 6 every 2nd element starting at pos 0: 1 3 5 values that are even: 2 4 6 values at positions 0, 1, 2, 4: 1 2 3 5
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 624 | C++98 | 過載 (4-7) 的行為在以下情況下 如果 other 的長度不等於 size() ,則不清楚 |
行為是 未定義的 |
LWG 630 | C++98 | 複製賦值運算子的行為在以下情況下 如果 size() != other.size(),則未定義 |
調整 *this 的大小 在此情況下優先 |
LWG 2071 | C++11 | 移動賦值運算子在以下情況下調整 *this 的大小,如果 size() != other.size() |
不要求 在此情況下調整大小 |