Naw*_*waz 14 c++ operators user-defined-functions
我可以使用一些帮助来理解C++中的以下内容,特别是运算符和函数之间的区别:
operator+()的函数还是运算符?sizeof()在C++中)Joh*_*itb 11
一个运营商是一个符号像+,-,+=等等(见13.5).它们没有意义.在语义分析期间,确定运算符的含义.
函数是构造函数,析构函数,转换函数(看起来像operator type())或运算符函数(函数模板特化和实例化可以依次产生这些函数).
一个运营商的功能是什么,实现运营商(见13.5).一个例子是operator+.这些都是各方面的功能,与"通常"功能的唯一区别在于它们可以被隐式调用,并且它们有一个有趣的名称.
有些运算符具有内置含义,可由程序员更改.一个简单地通过说内置运算符来指代运算符的内置含义(参见5/3).但是,如果将这样的运算符应用于定义了内置含义的操作数,则仅在少数情况下允许更改该含义(这些是赋值,地址和逗号运算符,请参阅13.5/6).
什么是运营商?
运算符是表达式中使用的符号.
例如:+ - */等
在内置类型中,操作定义明确且不可更改.
对于用户定义的类型,可以将运算符定义为函数/方法调用的语法糖
Array a;
a = b + c; // a.operator=(b.operator+(c));
Run Code Online (Sandbox Code Playgroud)
什么是功能?
我们大多数时候都可以互换地使用术语函数/方法.唯一的区别是方法与类对象的实例相关联.否则他们是一样的.它们提供了将一组指令组合在一起的方法.
他们之间有什么区别?
内置类型的运算符的动作由编译器定义.
操作符对用户定义类型的操作是函数调用.
用户定义的运算符+()是函数还是运算符?
它的功能(或方法).在用户定义的类型上使用运算符是函数调用的语法糖.尽管在正常的谈话中,他们仍然被称为运营商.
操作员可以在编译时操作操作数吗?
对于内置类型是的.编译器具有优化使用的广泛能力.
对于用户定义的类型.它可以对运算符执行优化,就像可能导致消除的其他函数一样,但代码不会在编译时执行.
它们总是在编译时运行吗?(比如C++中的sizeof())
号码sizeof()相对独特.
要显示用户定义类中的运算符与函数一样,这是使用mem_fun_ref的示例
#include <vector>
#include <algorithm>
#include <memory>
#include <functional>
class X
{
public:
// Non standard operators.
// Because std::mem_fun_ref has a known weakness in that it can
// not be used with methods that take parameters be reference.
//
// The principle is the same though. That the operator+ can be
// used anywhere that the add() method can be used.
X& operator+(X* rhs) { return *this;}
X& add(X* rhs) { return *this;}
};
typedef X& (X::*MEMF)(X* rhs);
int main()
{
MEMF p1 = &X::add;
MEMF p2 = &X::operator+;
X value;
std::vector<X> data;
std::for_each(data.begin(),
data.end(),
std::bind2nd(std::mem_fun_ref(&X::operator+),&value));
}
Run Code Online (Sandbox Code Playgroud)