栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++复合运算符 “按位或并赋值“的妙用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++复合运算符 “按位或并赋值“的妙用

博主在阅读openmesh源码时看到了如下代码(其中与本文要说明内容无关的部分已经略去)

size_t id = 0;
    if (edgeData_[i].is_new)  id |= 1;// |= 按位或并赋值
    if (edgeData_[ii].is_new) id |= 2;


    if (id)
    {
      //

      // set outer links
      switch (id)
      {
        case 1: // prev is new, next is old
          //
          break;

        case 2: // next is new, prev is old
          //
          break;

        case 3: // both are new
          if (!halfedge_handle(vh).is_valid())
          {
            //
          }
          else
          {
            //
          }
          break;
      }

      // set inner link
      //
    }
    else ……;

注意到id这个size_t类型的变量,其身份明显是一个开关,首先给id的初值是0,紧跟着两个if语句,如果布尔条件成立,id相继会和1,2做按位或的操作。读到这里我想,既然0和任何一个数进行或操作得到的结果还是那个数本身,那么直接赋值1和2不就好了?

问题的关键点是“相继”,如果直接赋值,2会将1给覆盖掉,10会将01变成10。可如果换成按位或,01和10将会得到11,也就是后面switch语句出现的case 3分支。因此按位或在这里以特别简洁的形式实现了复杂的功能,是很优雅的写法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/989651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号