gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:07 25 4
gpt4 key购买 nike

我是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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com