簡體   English   中英

我究竟如何重載“{”運算符?

[英]How exactly can I overload the '{' operator?

要初始化 std::vector,我可以直接使用 initializer_list,如下所示:

std::vector<int> myVec = {1, 2, 3, 4};

如果我創建一個自定義列表類(它將包含許多項目),例如class customVector (為了簡單起見,僅使用整數,我想我可以自己弄清楚如何使用模板,如果需要的話),我可以重載運算符 '{' 以這樣一種方式可以在同一件事中初始化customVector的實例嗎? 這樣我就可以寫

customVector myCustomVec = {1, 2, 3, 4}

你可以完成你最終想要的,但不能通過重載任何運算符—— {不是運算符。

vector通過使用一個帶initializer_list參數的構造函數來做到這一點,你可以對你的類做同樣的事情。

學習如何做並實施它作為練習。

您不能,因為{不是運算符。 C++20 ,以下運算符是可覆蓋的:

+    -    *    /    %    ^    &    |    ~    !    =
<    >    +=   -=   *=   /=   %=   ^=   &=   |=   <<
>>   >>=  <<=  ==   !=   <=   >=   &&   ||   ++   --
,    ->*  ->   ()   []

C++20添加了飛船操作符<=>但我相信就是這樣。

正如其他人指出的那樣, {不是運算符。 但是,您仍然可以根據需要使用初始化列表 它是標准庫的一部分。

#include <iostream>
#include <initializer_list>
using namespace std;

template <typename T>
struct customVector {
    customVector(std::initializer_list<T> list) : size(list.size()) {
        arr = new T[size];
        int count = 0;
        for(auto val: list) arr[count++] = val;
    }
    T* arr;
    std::size_t size;

    ~customVector() {
        for(int i = 0; i < size; i++)
            std::cout << arr[i] << std::endl;
        delete [] arr;
    }
};

int main() {
    customVector<int> myCustomVec = {1, 2, 3, 4};
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM