zoukankan      html  css  js  c++  java
  • 2:瞧,这是UE4 C++

      紧接着上面学到的指针和域名空间我们继续逛Unreal 4 wiki。

      1.怪形 T

      在自己很早学习编程的时候看到过匈牙利表示法,记得是微软的开发者Charles提出来的,尽管看起来很美好但是从来没有遵循过。

      其实那些前缀T就是这回道理。UE4 有自己的定义类,所以我们的标题不叫C++学习。

      TArray

      TSharedRef

      TWeakPtr

      TArray

      之类,带前缀T表示Template class,前缀能让你轻易地区分变量名。

      UE4中的T前缀变量应该让你想起两件东西

      ①一种游戏类型

      ②一种变量类型

      当然UE4中还有T,F,U,A,I等前缀去这里看Epic's Naming Conventions

      

      2.你的痛:指针

      伙计,*和&到底是什么东西?怎么用?着实让我头大:S

      这也是新手学习C++最难得地方了吧,但是一旦你掌握了指针你将会快乐的编写UE4 C++了

      总的来说指针既强大又危险,指针需要你成为一位勤勉的人,与之换来的将赋予你速度和力量。对,就像葵花宝典一样。你得有挥刀的决心XD

      

      ①一个指针必须指向一个数据存储的存储地址

      ②为了获取地址你就得使用&

      FVector Location=FVector(1,2,9000);

      FVector* LocationPtr;

      LocationPtr=&Location;

      ③访问数据前,永远检测你的指针

      Check(LocationPtr);

      或者

      if(!LocationPtr)return;

      你必须这样做,因为你永远不知道什么时候指针中存储的值是有效的

      你可以重定向

      Fvector NewVector=FVector::ZeroVector;

      if(LocationPtr)

      {

        NewVector=*LocationPtr;   //重定向指针
      }

      if(!LocationPtr)return;

      const float XValue=LocationPtr->X;

      3.总结:为什么使用指针?

      有很多人喜欢看总结篇,因为貌似总结篇很能讲一些道理,这次我们也不例外:)

      ①指针能让你获取地址,试想一下你当前在编写context,但是要访问一个不是这个context的变量,地址能给你很快的传回

      ②指针还能让你获取大量的数据,从而避免还得创建复制这一类型

      ③指针给你一种活链接,无论你的数值怎么变化,指针都无需更新因为它仅仅是一个指向。就像超级链接一样,你尽管修改自己的网页,URL给我~

      

      Example:我们来获取一个超级超级远的数据

      假设你有一个角色类,他是众多银河,子星系的星球的一部分,我们仅仅是要获取他的盔甲,估计你会这样作:

      GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor();

      上边的访问是不是看起来都很废?虽然能解决问题

      

      如果只做一次指针指代能好一点?

      FArmorStruct* TheArmor=& GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor();

      既然做了一次指代你就不需要再写下面的代码了:

    GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor().Durability;
    GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor().Color;
    GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor().Size;
      瞧,为了偷懒我都直接复制过来了。
      这样不仅难读,同时又浪费CPU时间
      
    然后你会这样写
      
    if(!TheArmor) return; //永远检测指针
    TheArmor->Durability;
    TheArmor->Color;
    TheArmor->Size;

      上述使用了指针,你或许会问,为什么我不是用FArmorStruct ArmorVar=
    GetGalaxy()->GetSolarSystem()->GetPlanet()->GetMainCharacter()->GetCurrentArmor();


      而是使用指针?
      假设一下,若果有众多数据你将会进行大量的赋值拷贝。我在写iCLoud的时候因为不能将多object直接传送到云端谢了大量代码变量抄写,这可真的非常痛苦。除此之外这些数据就写在一片连续的内存中。
      第二点是,你将会失去前面说的链接功能,本地的变量修改了,你的指针完全能抄写回来,因为他是一种链接记着吗


      

      

  • 相关阅读:
    延迟加载和缓存
    动态SQL
    Mybatis框架模糊查询+多条件查询
    mybatis增删改
    初始mybatis(二)
    Struts2框架和SpringMvc框架的区别
    MyBatis框架与Hibernate 框架的区别
    初始mybatis
    Servlet
    find命令使用
  • 原文地址:https://www.cnblogs.com/NEOCSL/p/4008513.html
Copyright © 2011-2022 走看看