C++基础---运算符

1. 运算符

1.1 运算符的定义

  • 运算符(也称操作符): 指可以进行运算操作的符号。
  • 运算符的作用:用于执行程序代码运算,会针对一个或以上操作数来进行运算,提供给运算符进行操作的数值称为操作数。

1.2 运算符的种类

  • 赋值运算符:作用是把某个常量或变量或表达式的值赋值给另一个变量。得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为它们出现在赋值语句的右边。常数只能作为右值
    (1)赋值运算符:“=”;
  • 算术运算符:有两个单目和五个双目运算符。
    (1)双目加法/单目正:“+”;
    (2)双目加法/单目负:“-”;
    (3)双目乘法:“*”
    (4)双目除法“/”;
    (5)双目取余:“%”;
  • 逻辑运算符:根据表达式的值来返回真值或是假值。
    (1)逻辑“与”:“&&”(当所有条件同时为真,逻辑判断才为真);
    (2)逻辑“或”:“||” (当任一个条件为真,逻辑判断即为真);
    (3)逻辑“非”“!”(当条件为假,逻辑判断为真);
  • 关系运算符:是先对两个表达式进行比较,然后返回一个真/假值。
    (1)大于:“>”
    (2)小于:“<”
    (3)大于或等于:“>=”
    (4)小于或等于:“<=”
    (5)等于:“==”
    (6)不等于:“!=”
  • 自增自减运算符:对变量的操作结果是增加1和减少1。
    (1)自增1:“++”
    (2)自减1“- -”
  • 复合赋值运算符:实际上是一种缩写形式,使得对变量的改变更为简洁。
    (1)加法赋值:“+=”
    (2)减法赋值:“-=”
    (3)乘法赋值:“*=”
    (4)除法赋值:“/=”
    (5)模运算赋值:“%=”
    (6)左移赋值:“<<=”
    (7)右移赋值:“>>=”
    (8)位逻辑与赋值:“&=“
    (9)位逻辑或赋值:”|=“
    (10)位逻辑异或赋值:“^=”
  • 条件运算符(三目运算符):唯一的一个三目运算符,它是对第一个表达式作真/假检测,然后根据结果返回另外两个表达式中的一个。
    (1)<表达式1>?<表达式2>:<表达式3>
    在运算中,首先对表达式1进行真假判断,
    如果为真,则返回表达式2的值;
    如果为假,则返回表达式3的值。
    int a=1, b=2, c;
    c = (a>b) ? a : b; =>2
  • 逗号运算符:多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
    a=(b=2,c=7,d=5); => a=5
    a1=(++b,c- -,d+3); => a1=8

1.3 运算符的优先级和结合性

  • 运算符的优先级和结合性列表

    优先级运算符结合性
    1::
    2.   ->   []   ()
    3++   - -   ~   !   -   +   &   *   ()   sizeof   new   delete   castname_cast< type >   单目运算符
    4.*   ->*
    5*  /   %
    6+  -
    7<<   >>
    8<   <=   >   >=  
    9==   !=
    10&
    11^
    12l
    13&&
    14ll
    15? :
    16=   *=   /=   %=   +=   -=   <<=   >>=   &=   l=   ^=
    17throw
    18,

    注:结合性是指如果表达式中遇到相邻两个运算符是相同优先级,先做哪个僵持不下时,以结合性定夺。如a=b=1; “=”是赋值运算符, 查表在第16级,结合性是右结合,表示先做b=1,再做a=b,最后a的值等于b的值,都是1。


参考文献:
[1]《C++全方位学习》范磊——第五章
[2]《C++程序设计教程(第二版)》钱能——第四章
[3] 百度搜索关键字:C++运算符、运算符的种类、运算符的优先级和结合性

<think>嗯,用户询问C++中的'->'运算符的含义用法。这个问题非常具体,针对的是C++中一个重要的指针相关运算符。从提供的引用资料可以看到相关信息:引用[4]直接展示了'->'运算符的用法示例,用户主要关注点在于理解这个操作符的核心功能使用场景。其他引用提及了位运算符、比较运算符等内容,但用户的需求已明确聚焦在'->'上。用户的表述非常专业,直接使用了“运算符”这个术语,表明应该是有一定编程基础的开发者。用户特意强调需要知道“含义”、“用法”、“解释”三个层面,回答时需要覆盖这三个维度。考虑这样安排回答结构:在含义部分需要强调本质——这是通过指针访问对象成员的专门运算符。在解释基础语法时准备说明其由减号大于号组成,结合优先级概念会更专业。关于使用场景部分考虑从两个层面说明:常规的指针访问成员情况,以及智能指针/迭代器的特殊应用场景。这既能满足基础学习需求,又覆盖现代C++的常见用法。联想到用户可能还存在的潜在疑问:这个运算符运算符的区别与联系?是否需要搭配delete使用?是否涉及内存安全?这些内容也计划在补充说明里提及。引用[4]的示例代码很清晰,直接引用并解释代码逻辑会更直观。在回答时准备标注示例代码中两个关键使用场景:结构体成员赋值方法调用。用户没有提问但可能关心的延伸点:运算符重载的实现机制,现代C++的智能指针用法。这些问题也考虑在最后部分列出作为知识拓展点。整体回答将保持“基础解释→核心用法→特殊场景→要点总结”的逻辑链条,确保既有理论深度又有实用价值。</think> ### C++中`->`运算符的详细解析 #### **1. 基本含义** `->`是**成员访问运算符**,专用于**指针访问对象成员**时替代`.`运算符。其本质是: ```cpp ptr->member // 等价于 (*ptr).member ``` 其中`ptr`是对象指针,`member`是对象的成员(变量或方法)。 #### **2. 核心用法** ##### **场景1:访问类/结构体成员** ```cpp #include <iostream> using namespace std; struct Student { string name; void print() { cout << name << endl; } }; int main() { Student s1; Student* ptr = &s1; // 指向s1的指针 ptr->name = "Alice"; // 通过指针修改成员变量 ptr->print(); // 通过指针调用成员方法 // 输出:Alice } ``` ##### **场景2:动态内存对象** ```cpp Student* ptr = new Student(); // 动态创建对象 ptr->name = "Bob"; delete ptr; // 需手动释放内存 ``` ##### **场景3:智能指针/迭代器** ```cpp #include <memory> #include <vector> int main() { vector<string> vec{"A", "B"}; auto it = vec.begin(); // 迭代器类似指针 cout << it->size() << endl; // 通过->访问元素方法 auto ptr = make_unique<Student>(); // 智能指针 ptr->name = "Charlie"; // 使用方式与普通指针相同 } ``` #### **3. 与`.`运算符的关键区别** | 运算符 | 适用对象 | 示例 | |--------|-----------------|------------------| | `.` | 对象本身 | `obj.member` | | `->` | **指向对象的指针** | `ptr->member` | **错误示例**: ```cpp Student s; Student* ptr = &s; cout << ptr.name << endl; // 错误!指针应用-> ``` #### **4. 特殊场景:运算符重载** `->`可以被重载以实现特殊行为(如智能指针): ```cpp class CustomPtr { Student* target; public: Student* operator->() { return target; // 返回实际指针 } }; CustomPtr ptr; ptr->name = "Custom"; // 实际调用ptr.operator->()->name ``` #### **5. 注意事项** - **空指针风险**:使用前需检查指针有效 ```cpp if (ptr != nullptr) ptr->print(); ``` - **连续访问**:支持链式调用 ```cpp ptr->next->next->data = 10; ``` - **智能指针**:优先使用`unique_ptr`/`shared_ptr`避免内存泄漏[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值