operators

来自cppreference.com
< cpp‎ | language

 
 
C++ 语言
表达式
替代表示
字面量
布尔 - 整数 - 浮点
字符 - 字符串 - nullptr (C++11)
用户定义 (C++11)
工具设施
特性 (C++11)
类型
typedef 声明
类型别名声明 (C++11)
强制转换
隐式类型转换 - 显式类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类特有的函数属性
特殊成员函数
模板
杂项
 

目录

[编辑] 运算符重载

[编辑] 语法

type operator op ( params ) ;

[编辑] 解释

  • <类型> /(s)的变量的类型.
    原文:
    <type> is/are the type(s) of the variables.
    文本通过谷歌翻译机器翻译。
    你可以帮忙校正和验证翻译。点击此处查看指示。
  • <op>是在特定的操作(例如++=<<>>&&||%等).
    原文:
    <op> is the particular operator (e.g. +, +=, <<, >>, &&, ||, %, etc.).
    文本通过谷歌翻译机器翻译。
    你可以帮忙校正和验证翻译。点击此处查看指示。
  • 与<params> /(s)的所需的参数的名称(取决于操作员).
    原文:
    <params> is/are the name(s) of the required parameters (depends on the operator).
    文本通过谷歌翻译机器翻译。
    你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 限制

  • 您不能创建新的运营商,如**&|.
    原文:
    You cannot create new operators such as ** or &|.
    文本通过谷歌翻译机器翻译。
    你可以帮忙校正和验证翻译。点击此处查看指示。
  • 并非所有的运营商都可以被重载
    原文:
    Not all operators can be overloaded
    文本通过谷歌翻译机器翻译。
    你可以帮忙校正和验证翻译。点击此处查看指示。
  • 一些运算符只能重载为类非静态成员
    原文:
    Some operators can only be overloaded as non-static class members
    文本通过谷歌翻译机器翻译。
    你可以帮忙校正和验证翻译。点击此处查看指示。
  • 不使用重载运算符的短路计算
    原文:
    Short-circuit evaluation doesn't work with overloaded operators
    文本通过谷歌翻译机器翻译。
    你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 操作者呼叫

使用通常的中缀符号可以被称为重载操作符
原文:
Overloaded operators can be called using the usual infix notation
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
a+b
或函数符号
原文:
or a function-like notation
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
operator+(a,b)

[编辑] 示例

#include <iostream>
 using namespace std;
 
 class Fraction{
   private:
     int numerator, denominator;
 
   public:
     Fraction(int n, int d): numerator(n), denominator(d) {}
   // Note that the keyword operator combined with an actual
   // operator is used as the function name
   friend ostream& operator<<(ostream&, Fraction&);
 };
 
 ostream& operator<<(ostream& out, Fraction& f){
   out << f.numerator << '/' << f.denominator;
   return out;
 }
 
 int main(){
   Fraction f1(3, 8);
   Fraction f2(1, 2);
 
   cout << f1 << endl;
   cout << 3 << ' ' << f2 << endl;
 
   return 0;
 }

输出:

3/8
3 1/2

[编辑] 见也

普通运算符
赋值 自增
自减
算术 逻辑 比较 成员访问 其他

a = b
a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b

++a
--a
a++
a--

+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

!a
a && b
a || b

a == b
a != b
a < b
a > b
a <= b
a >= b

a[b]
*a
&a
a->b
a.b
a->*b
a.*b

a(...)
a, b
? :

特殊运算符

static_cast 将一个类型转换为另一个相关类型
dynamic_cast 在继承层次中进行转换
const_cast 添加或移除 cv 限定符
reinterpret_cast 将类型转换为无关的类型
C 风格的强制转换通过混合 static_castconst_castreinterpret_cast 将一个类型转换为另一个类型
new 分配内存
delete 回收内存
sizeof 查询类型的大小
sizeof... 查询形参包的大小(C++11 起)
typeid 查询类型的类型信息
noexcept 检查表达式是否会抛出异常(C++11 起)
alignof 查询类型的对齐要求(C++11 起)