fuj*_*uji 0 c++ class operator-keyword
我有一个看起来像这样的类:
class A {
public:
A() {};
A& operator<< (A& a, unsigned int i);
private:
vector<int> abc;
}
Run Code Online (Sandbox Code Playgroud)
我想提供abc使用运算符添加对象的功能:
A a();
a << 3,4,5; // should do the same as several calls of abc.push_back(i)
Run Code Online (Sandbox Code Playgroud)
我知道我必须超载<<操作员,我是否还要超载,操作员?
实际方法怎么样?
永远不会,在C++中重载运算符.语言允许它,但你不能这样做并保留操作符的预期行为.(特别是,逗号操作者是在C++中的序列点:编译器保证了左侧的表达式将在右边的表达式之前评估如果过载它,就不再存在哪些表达式将被评估的任何保证第一.)
您希望使用流插入运算符的多个调用来插入多个对象.
(出于完整性:日eother C++运算符,你应该永远是超负荷&&和||再次,它不可能提供行为的客户端代码将期待(短路,在这种情况下).).
如果你想保持的方面a << 1, 2, 3,你可以改变你的超载operator<<来接受initializer_list的int,而不是单一的,int.
#include <initializer_list>
class A {
public:
A() {};
A& operator<< (std::initializer_list<int> values);
private:
vector<int> abc;
}
Run Code Online (Sandbox Code Playgroud)
然后实现它像:
A& A::operator<< (std::initializer_list<int> values)
{
for(const auto& value : values)
abc.push_back(value);
return *this;
}
Run Code Online (Sandbox Code Playgroud)
只需使用如下:
A a;
a << {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)
您需要确保的唯一事情是您具有提供这些功能的符合C++ 11的编译器.