c++ - 为 std 库类定义运算符

标签 c++ initializer-list

我是windows 7用户,使用Visual Studio Express 2012。使用的编译器是程序自带的编译器。我遇到的具体问题是此版本的 Visual Studio 的 vector 尚不支持 initializer_list。此外,我似乎在使用 initializer_list 类时遇到问题。我不确定这是不是我自己的无能,但事实是我不能使用 initializer_list 来 vector 。

但是,我希望有一些与 intializer_list 具有相同语法的东西,即使实现。但是,由于我写信给 SO 的主要原因是学习,所以这不是问题所在。我认为如果可以为 std 类创建运算符,则可以为 vector 定义一个类似于 initializer_list 的运算符,所以问题是:

是否可以为标准库类定义运算符?如果可以,我该怎么做?

我尝试的是创建一个创建长度为 1 的 vector 的示例:

#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};
}

这根本行不通。事实上,这甚至无法编译。一个有效的例子将不胜感激,但是一个最小的例子,一个运算符(operator)用 vector 做任何事情就足够了。我认为我的主要问题是为已经存在的类定义一个运算符是主要问题。

最佳答案

别忘了。您不能定义要重载的新运算符。只有其中的一堆可以重载。

出现的第一个谷歌结果:http://www.cprogramming.com/tutorial/operator_overloading.html

重载可以是:

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

你不能重载:

    ?       .*

而且您不能定义新的运算符,尤其是 不能 { } 运算符。

关于c++ - 为 std 库类定义运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25916033/

相关文章:

c++ - 使用一个函数调用 C++ 初始化多个常量类成员

c++ - 如何在 mac os 10.14 上安装 vcremote?

c++ - 使用相同 std::view 的两个不同拷贝

c++ - 使用它的结构指针访问函数内的结构

c++ - 初始化列表: cannot convert ‘Participant’ to ‘unsigned int’ in initialization

c++ - 初始化列表奇怪地取决于参数的顺序?

c++ - C++11 中赋值列表和初始化列表之间缩小的差异

c++ - 我可以列表初始化一个只 move 类型的 vector 吗?

c++ - GLUT 和 C++ 类

c++ - 使用具有实时性能要求的 c++ STL stringstream 进行日志记录