重新定义已定义类型的单个运算符.C++

ppy*_*abw 1 operator-overloading operators c++11

我想重新定义C++中的64位无符号整数位的移位操作以这样的方式,我可以不这样说,x<<d其中x一个64位整数,然后d是一个整数|d|<64,使其等同于x<<dd>0x>>|d|d<0.

我知道如何做到这一点的唯一方法是定义一个全新的类并重载<<运算符,但我认为这也意味着我需要重载我需要的所有其他运算符(除非有一个技巧我不知道考虑到我希望它们的行为与预定义类型完全相同,这似乎有点傻.这只是我要改变的位移.目前,我刚刚写了一个名为'shift'的函数来执行此操作,这似乎不是c ++ ish,即使它工作正常.

做我需要的风格正确的方法是什么?

谢谢

Jef*_*nie 5

如果你能够做到这一点,那么阅读你的代码并看到其他C++程序员会非常困惑:

int64 x = 92134;
int64 y = x >> 3;
Run Code Online (Sandbox Code Playgroud)

并且它的行为与预期不同,并且与C++标准定义的行为不同.

与我见过的C++代码最相似的风格选择是继续使用自己的myshift()函数.

int64 y = myshift(x, 3);
Run Code Online (Sandbox Code Playgroud)