c++是不是分别对 char short int long 做了位运算定义?

有点疑惑,就写了点代码测试一下:

void test() {
  char a = 1;
  if (std::is_same<decltype(a >> 1), char>::value)
    std::cout << "type (char>>1) == char" << std::endl;
  if (std::is_same<decltype(a >> 1), int>::value)
    std::cout << "type (char>>1) == int" << std::endl;

  long b = 1;
  if (std::is_same<decltype(b >> 1), long>::value)
    std::cout << "type (long>>1) == long" << std::endl;
  if (std::is_same<decltype(b >> 1), int>::value)
    std::cout << "type (long>>1) == int" << std::endl;

  if (std::is_same<decltype(a + 1), char>::value)
    std::cout << "type (char+1) == char" << std::endl;
  if (std::is_same<decltype(a + 1), int>::value)
    std::cout << "type (char+1) == int" << std::endl;
}

运行结果:

type (char>>1) == int
type (long>>1) == long
type (char+1) == int

看来运算基本就是围绕int 和 long进行的,别的类型先隐式转换到int long,再进行计算。

unity获取鼠标点击坐标

前提条件:

只能点击带有collider的物体。一般人物角色、怪物、地表都有collider,都是可以点击的。如果代码运行没有效果,首先检查collider。

代码

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            //从摄像机发出到点击坐标的射线
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                //划出射线,只能在场景视图中才能看到
                Debug.DrawLine(ray.origin, hit.point);
                //hit.point就是鼠标点到的坐标,不一定是点到地面,也可能是点到人
                //或者别的带有collider的物体。
                //TODO
            }
        }
    }