将运算符定义为std库类

时间:2014-09-18 14:54:59

标签: c++ initializer-list

我是使用Visual Studio Express 2012的Windows 7用户。使用的编译器是程序附带的编译器。我遇到的具体问题是,此版本的Visual Studio的矢量尚不支持initializer_list。另外,我似乎在使用initializer_list类时遇到了问题。我不确定这是否是由于我自己的无能力,但事实仍然是我不能使用initializer_list来传播。

但是,即使实现,我也希望使用与intializer_list相同的语法。但是,由于我写给SO的主要原因是学习这不是问题。我认为如果可以创建std类的运算符,就可以定义一个像vector的initializer_list一样的运算符,所以问题是:

是否可以为std库类定义opperator,如果是,我该怎么做?

我尝试过创建一个创建长度为1的向量的示例:

#include<iostream> //Used for later debugging
#include<vector>
#include<string> // Used later

template<typename T>
std::vector<T> operator {} (T y){
std::vector<T> out;
out.push_back(y);
return out;
};

int main(){
std::vector<int> v = {1};
}

这根本不起作用。实际上,这甚至都没有编译。可以理解一个工作示例,但是操作员使用向量执行任何操作的最小示例就足够了。我认为我的主要问题是为已经存在的类定义一个运算符是主要问题。

1 个答案:

答案 0 :(得分:1)

别忘了。您无法定义要重载的新运算符。只是其中一堆可能会超载。

首先提出了google结果:http://www.cprogramming.com/tutorial/operator_overloading.html

重载可以是:

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

你不能超载:

    ?       .*

您无法定义新的运算符,尤其是 {}运算符。

相关问题