当前位置: 首页 > news >正文

企业网站建设 租用服务器软件开发需要具备什么条件

企业网站建设 租用服务器,软件开发需要具备什么条件,东莞营销外包公司,网站用什么格式做函数参数的最佳传递方式与现代C的规则 在C中#xff0c;如何最佳地传递函数参数以及如何处理类的特殊成员函数#xff0c;一直是优化性能和代码质量的重要话题。下面我将详细解释这些概念。 使用移动语义实现 Swap 函数 移动语义#xff08;Move Semantics#xff09;能…函数参数的最佳传递方式与现代C的规则 在C中如何最佳地传递函数参数以及如何处理类的特殊成员函数一直是优化性能和代码质量的重要话题。下面我将详细解释这些概念。 使用移动语义实现 Swap 函数 移动语义Move Semantics能够提升性能的一个例子是实现一个交换swap函数模板该模板交换两个对象。不使用移动语义的实现如下 template typename T void swapCopy(T a, T b) {T temp { a };a b;b temp; }这种实现方式会影响性能尤其是当类型T的拷贝开销很大时。使用移动语义实现可以避免所有拷贝 template typename T void swapMove(T a, T b) {T temp { std::move(a) };a std::move(b);b std::move(temp); }这就是标准库中 std::swap() 的实现方式。 在返回语句中使用 std::move() 如果返回语句的形式为 return object;并且 object 是一个局部变量、函数参数或临时值编译器会将其视为右值表达式并触发返回值优化RVO。此外如果 object 是一个局部变量命名返回值优化NRVO也可能发生。RVO和NRVO都是拷贝省略Copy Elision的形式使得从函数返回对象非常高效。 使用 std::move() 来返回对象会怎样呢无论你写 return object; 还是 return std::move(object);在两种情况下编译器都会将其视为右值表达式。然而使用 std::move()编译器无法再应用RVO或NRVO这可能会对性能产生重大影响 所以请记住以下规则当从函数返回局部变量或参数时只需写 return object;不要使用 std::move()。 参数的最佳传递方式 到目前为止建议对非原始类型的函数参数使用 const 引用参数以避免不必要的昂贵拷贝。然而随着右值的引入情况略有变化。想象一个无论如何都会拷贝其参数的函数。现在你可能想要添加一个重载以避免在右值的情况下进行任何拷贝。这里有一个例子 class DataHolder { public:void setData(const std::vectorint data) {m_data data;}void setData(std::vectorint data) {m_data std::move(data);}private:std::vectorint m_data; };但是有一种更好的方式涉及使用传值的单个方法。对于函数本来就会拷贝的参数使用传值语义是最优的选择。如果传入左值它恰好被拷贝一次。如果传入右值不会进行拷贝。 零规则Rule of Zero 在现代C中应该遵循所谓的零规则Rule of Zero。这个规则指出你应该设计你的类使它们不需要任何特殊的成员函数。怎么做到这一点呢基本上你应该避免使用任何老式的动态分配内存。相反应该使用像标准库容器这样的现代构造。例如使用 vectorvectorSpreadsheetCell 替代 Spreadsheet 类中的 SpreadsheetCell** 数据成员。vector 会自动处理内存因此不需要任何特殊的成员函数。 现代C中推荐使用零规则而五规则Rule of Five应该限于自定义的资源获取是初始化RAII类。RAII类获取资源的所有权并在合适的时候处理它的释放。这是一种设计技术例如由 vector 和 unique_ptr 使用并在后续的章节中进一步讨论。 静态方法和 const 方法是 C 中的两个重要概念它们各自在不同的情况下发挥着重要作用。 静态方法Static Methods 静态方法是那些不依赖于类的实例而存在的方法。与静态数据成员类似静态方法适用于整个类而不是每个对象。在实现静态方法时需要注意以下几点 静态方法不是针对特定对象调用的因此它们没有 this 指针也无法访问类的非静态成员。静态方法可以访问类的私有和保护的静态成员也可以在具有相同类型的对象上访问私有和保护的非静态成员前提是这些对象对静态方法可见例如通过作为参数传递对象的引用或指针。在类内部的任何方法中可以像调用常规成员函数一样调用静态方法。在类外部需要使用作用域解析操作符::并带上类名来调用静态方法。 例如 Foo::bar();const 方法Const Methods const 方法是保证不会修改任何数据成员的方法。如果你有一个 const 对象引用到 const 或指向 const 的指针编译器不允许你调用除非是 const 方法的任何方法。通过在方法声明时使用 const 关键字可以保证该方法不会修改任何数据成员。 例如 double SpreadsheetCell::getValue() const {return m_value; }std::string SpreadsheetCell::getString() const {return doubleToString(m_value); }在 const 方法内部所有数据成员都被视为 const因此如果尝试修改数据成员编译器会报错。不能将静态方法声明为 const因为这是多余的。静态方法没有类的实例因此它们无法更改内部值。在非 const 对象上可以调用 const 和非 const 方法。然而只能在 const 对象上调用 const 方法。 mutable 数据成员Mutable Data Members 有时你可能会编写一个在逻辑上是 const 的方法但该方法恰好会更改对象的某个数据成员。这种修改对用户可见的数据没有影响但从技术上讲是一种更改因此编译器不允许你将方法声明为 const。在这种情况下可以使用 mutable 关键字来声明那些即使在 const 方法中也可以被修改的数据成员。 例如 class SpreadsheetCell {// ... private:double m_value { 0 };mutable size_t m_numAccesses { 0 };// ... };double SpreadsheetCell::getValue() const {m_numAccesses;return m_value; }std::string SpreadsheetCell::getString() const {m_numAccesses;return doubleToString(m_value); }在这个例子中即使 getValue() 和 getString() 被标记为 const它们也可以修改 m_numAccesses因为它被声明为 mutable。这允许方法在保持其 const 性质的同时对某些数据成员进行修改。 参考Professional C 5Th Edition 公众号coding日记
http://www.hkea.cn/news/14567872/

相关文章:

  • 没有ipc备案的网站建设电子商务网站总结
  • 网站开发的发展历史及趋势网站开发国内外现状研究
  • 工作号做文案素材的网站装饰设计乙级资质
  • 免费建设个人网站阳光家园广州网站
  • 哈尔滨网站建设工作室怎么在手机上设计网站
  • 阿尔山网站建设wordpress修改为中文
  • h5网站开发定制wordpress分类下的所有文章加密
  • 浙江建设人才网做360优化网站都有哪家
  • 网站群建设公司利用c 做网站
  • 宜宾市住房和城乡建设局网站网站页面优化公告
  • 网站建设字体颜色代码制作html网站模板
  • 做网站专题的效果如何创建自己的域名
  • 椒江网站制作什么企业时候做网站
  • 基于.net音乐网站开发app拉新推广代理
  • 牛商网做网站要多少钱wordpress js 太多
  • 电商网站建设系统注册免费
  • 免费外贸网站在线网站点赞怎么做
  • 怎么在阿里巴巴做网站网页画图工具
  • 网站建设上怎么优化自己的网站
  • 给县里做网站网站大学报名官网入口
  • 大连网站建设领超最好导航网站开发
  • 三门峡市住房和城乡建设局网站电商平台排名
  • 建设总承包网站东营房产网信息网
  • 网站建设谢辞优惠券网站怎么搭建
  • 呼和浩特公司做网站亚马逊跨境电商能赚钱吗
  • 网站建设入门 下载哪个网站做外贸的多
  • 亚马逊的网站建设企业网站建设视频
  • 毕设什么类型网站容易做湖南网站开发 岚鸿
  • asp.net 网站 方案东莞市凤岗建设局网站
  • 诚信网站体系建设工作在国外做外国的网站合法吗