Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中运算符和函数之间的差异+;? < >我可以用一些帮助理解C++中的下列内容,特别是操作符和函数之间的差异: 什么是接线员 什么是函数 他们之间有什么区别 用户定义的运算符+()是函数还是运算符 运算符能否在编译时对操作数进行操作?它们总是在编译时运行吗?(如C++中的sizeof()) 在C++中,可以重写符号+、、、=等在应用到类实例时所做的操作。通过在类A中定义“operator+”方法,可以告诉编译器如何处理以下代码: A a, b, c; c = a + b; // the + here actually calls a.operator+(b)_C++_Operators_User Defined Functions - Fatal编程技术网

C+中运算符和函数之间的差异+;? < >我可以用一些帮助理解C++中的下列内容,特别是操作符和函数之间的差异: 什么是接线员 什么是函数 他们之间有什么区别 用户定义的运算符+()是函数还是运算符 运算符能否在编译时对操作数进行操作?它们总是在编译时运行吗?(如C++中的sizeof()) 在C++中,可以重写符号+、、、=等在应用到类实例时所做的操作。通过在类A中定义“operator+”方法,可以告诉编译器如何处理以下代码: A a, b, c; c = a + b; // the + here actually calls a.operator+(b)

C+中运算符和函数之间的差异+;? < >我可以用一些帮助理解C++中的下列内容,特别是操作符和函数之间的差异: 什么是接线员 什么是函数 他们之间有什么区别 用户定义的运算符+()是函数还是运算符 运算符能否在编译时对操作数进行操作?它们总是在编译时运行吗?(如C++中的sizeof()) 在C++中,可以重写符号+、、、=等在应用到类实例时所做的操作。通过在类A中定义“operator+”方法,可以告诉编译器如何处理以下代码: A a, b, c; c = a + b; // the + here actually calls a.operator+(b),c++,operators,user-defined-functions,C++,Operators,User Defined Functions,它也是一个函数,或者更准确地说是一个实例方法,从某种意义上说,它是被调用的东西 编辑:另请参见 和运算符和函数之间没有什么有意义的区别,只是运算符的语法不同。然而,基本运算符不是函数。函数和运算符之间没有很大的区别。您可以将using运算符(例如“a+b”)视为函数运算符+(a,b)的快捷方式,该运算符是为a和b类型定义的。当然,基本类型(如整数)上的运算符和一些其他异常不一定是这样定义的 因此,要回答您的几个具体问题: 用户定义的运算符+()是函数还是运算符 实现运算符的函数 运算符能否在编译

它也是一个函数,或者更准确地说是一个实例方法,从某种意义上说,它是被调用的东西

编辑:另请参见

运算符和函数之间没有什么有意义的区别,只是运算符的语法不同。然而,基本运算符不是函数。

函数和运算符之间没有很大的区别。您可以将using运算符(例如“a+b”)视为函数运算符+(a,b)的快捷方式,该运算符是为a和b类型定义的。当然,基本类型(如整数)上的运算符和一些其他异常不一定是这样定义的

因此,要回答您的几个具体问题:

用户定义的运算符+()是函数还是运算符

实现运算符的函数

运算符能否在编译时对操作数进行操作?它们总是在编译时运行吗

因为它是一个函数,所以它在运行时运行,但在某些情况下,编译器优化可以在编译时对某些运算符起作用。我不是100%确定你为什么问这个问题,所以也许有一些事情我不知道

什么是接线员

通常是对给定某种标点符号形式的变量执行的操作。例如,两个整数之间的
运算符+
的默认行为是将它们相加

什么是功能

A是一个子例程——一个可重用的代码块

他们之间有什么区别

就用户代码而言,除了语法之外,什么都没有。请注意,如果覆盖
运算符| |
运算符&
、或(在较小程度上)运算符,则会更改内置运算符语义的语义。在
&&
| |
的情况下,您将通常短路的操作变成了不短路的操作。对于逗号,您需要确保从左到右计算参数,因为逗号运算符通常以这种方式工作

用户定义的运算符+()是函数还是运算符

都不是。它是用户定义的运算符重载。函数名不能以关键字
operator
开头,运算符只是用于调用运算符重载的实际标点符号,即
+
-
EDIT:注意,从技术上讲,它不是一个函数,但它确实具有函数调用的语义,如中所示

运算符能否在编译时对操作数进行操作?它们总是在编译时运行吗?(与C++中的sizeof()类似)


否,
sizeof
不能重载。如果您希望完成某种形式的编译时操作,则需要使用类似的方法。请注意,如果编译器能够在编译时进行计算,那么它当然可以省略对重载运算符的调用。

函数和运算符之间只有两个细微的区别

  • 运算符有两种使用方式(
    x+y
    operator+(a,b)
  • 运算符的参数数必须与内置的参数数相同(
    operator==
    必须正好有两个参数)。此规则的例外情况是函数调用
    operator()
    ,它可以用任意数量的参数重载
  • 什么是接线员

    运算符是表达式中使用的符号。
    例如:+-*/etc

    在内置类型上,操作定义良好且不可更改。
    对于用户定义的类型,可以将运算符定义为函数/方法调用的语法糖

    Array a;
    a = b + c; // a.operator=(b.operator+(c));
    
    什么是函数

    大多数情况下,我们交替使用术语“函数/方法”。唯一的区别是方法与类对象的实例相关联。否则它们是一样的。它们提供了一种将一组指令组合在一起的方法

    他们之间有什么区别

    运算符对内置类型的操作由编译器定义。
    运算符对用户定义类型的操作是函数调用

    用户定义的运算符+()是函数还是运算符

    它是一个函数(或方法)。在用户定义的类型上使用运算符是函数调用的语法糖。尽管在正常对话中,他们仍然被视为操作员

    运算符能否在编译时对操作数进行操作

    对于内置类型,是。编译器具有优化这些使用的广泛能力。
    对于用户定义的类型。它可以在操作符上执行优化,就像其他函数一样,这可能会导致被删除,但代码不会在编译时执行

    它们总是在编译时运行吗?(与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));
    }
    
    #包括
    #包括
    #包括
    #包括
    X类
    {
    公众:
    //非标准操作员。
    //因为std::mem_fun_ref有一个已知的弱点,它可以
    //不能与引用参数的方法一起使用。
    //
    //原理是一样的,运算符+可以是
    //