标签: operator-keyword

为什么重载true和false而不是定义bool运算符?

我一直在阅读有关在C#中重载true和false的内容,我想我理解这与定义bool运算符之间的基本区别.我看到的例子是这样的:

public static bool operator true(Foo foo) {
  return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
  return (foo.PropA <= 0);
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这与说:

public static implicit operator bool(Foo foo) {
  return (foo.PropA > 0);
}
Run Code Online (Sandbox Code Playgroud)

据我所知,区别在于,通过分别定义true和false,您可以拥有一个既是真又假的对象,或者既不是真也不是假:

public static bool operator true(Foo foo) { return true; }
public static bool operator false(Foo foo) { return true; }
//or
public static bool operator true(Foo foo) { return false; }
public static bool operator false(Foo foo) { return false; } …
Run Code Online (Sandbox Code Playgroud)

c# boolean overloading operator-keyword

18
推荐指数
2
解决办法
6406
查看次数

重载运算符 - >

这是我的代码示例:

class X
{
public:
        void f() {}
};

class Y : public X
{
public:
        X& operator->() { return *this; }
        void f() {}
};

int main()
{
        Y t;
        t.operator->().f(); // OK
        t->f(); // error C2819: type 'X' does not have an overloaded member 'operator ->'
                // error C2232: '->Y::f' : left operand has 'class' type, use '.'
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器试图将operator->的责任从Y移到X?当我实现X :: op->然后我不能返回X那里 - 编译错误说"无限递归",而从X :: op->返回一些Z再次说Z没有operator->,因此更高和等级越高.

谁能解释这个有趣的行为?:)

c++ overloading operator-keyword

18
推荐指数
2
解决办法
3638
查看次数

在Python中定义方法别名?

我有一个矢量类,我定义了__mul__将矢量乘以数字的方法.

这是__mul__方法:

def __mul__(self, other):
    x = self.x * other
    y = self.y * other
    new = Vector()
    new.set_pos((x, y))
    return new
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道数字和矢量之间是哪个.如果self是数字,则self.x会引发错误.(我可能会误解这一点:"其他"总是一个数字吗?)

所以我在这里找到:Python: 我可以做的乘法覆盖:

__rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)

但是我怎么能在课程定义中这样做呢?

就像是 :

def __rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)

python overriding class operator-overloading operator-keyword

18
推荐指数
2
解决办法
1万
查看次数

为什么这个运算符在尾随返回类型中的用法不能编译?

我试图在另一个函数的尾随返回类型中重用运算符的返回类型,但不幸的是clang不接受它

struct A {
  int operator[](int);
  auto at(int i) -> decltype((*this)[i]);
};
Run Code Online (Sandbox Code Playgroud)

Clang说我班上没有算子[].Gcc确实接受了我的代码.我的代码真的无效吗?

c++ language-lawyer operator-keyword c++11 trailing-return-type

18
推荐指数
1
解决办法
462
查看次数

使用三元运算符进行奇怪的隐式转换

我有以下代码:

class A {
public:
    operator int() const { return 5; }
};

class B {
public:
    operator int() const { return 6; }
};

int main() {
    A a;
    B b;
    int myInt = true ? a : b;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

尝试使用Visual Studio 2017 RC编译该代码会导致以下错误:

错误C2446 :: :没有转换BA

注意:没有可用于执行此转换的用户定义转换运算符,或者无法调用运算符

...这是令人惊讶的,因为在这种情况下,我希望它将它们转换为通用类型int.

clang (4.0)成功编译相同的代码,没有任何错误或警告.

在这种情况下,哪两个是正确的,为什么?

c++ type-conversion ternary implicit-conversion operator-keyword

18
推荐指数
1
解决办法
1071
查看次数

除了 as-pattern,@ 在 Haskell 中还有什么意思?

我目前正在研究 Haskell 并尝试了解一个使用 Haskell 来实现加密算法的项目。在线阅读Learn You a Haskell for Great Good 后,我开始了解该项目中的代码。然后我发现我被困在以下带有“@”符号的代码中:

-- | Generate an @n@-dimensional secret key over @rq@.
genKey :: forall rq rnd n . (MonadRandom rnd, Random rq, Reflects n Int)
       => rnd (PRFKey n rq)
genKey = fmap Key $ randomMtx 1 $ value @n
Run Code Online (Sandbox Code Playgroud)

这里的 randomMtx 定义如下:

-- | A random matrix having a given number of rows and columns.
randomMtx :: (MonadRandom rnd, Random a) => Int -> Int -> rnd …
Run Code Online (Sandbox Code Playgroud)

haskell symbols operator-keyword as-pattern

18
推荐指数
1
解决办法
412
查看次数

17
推荐指数
6
解决办法
5万
查看次数

@ error suppression operator和set_error_handler

我遵循良好的编程习惯,我将PHP错误记录到文件而不是将其显示给用户.我用set_error_handler()它.

现在问题.例如,我有一个地方:

@file_exists('/some/file/that/is/outside/openbasedir.txt');
Run Code Online (Sandbox Code Playgroud)

但是,尽管有错误抑制操作符,错误消息仍会记录.我不希望这样.我希望抑制错误不要传递给我的错误处理程序.

php logging error-reporting operator-keyword

17
推荐指数
3
解决办法
2246
查看次数

在C#中重载=运算符

好的,我知道这是不可能的,但这是制定问题标题的最佳方式.问题是,我正在尝试使用我自己的自定义类而不是浮点数(用于确定性模拟),我希望语法尽可能接近.所以,我当然希望能够写出类似的东西

FixedPoint myNumber = 0.5f;
Run Code Online (Sandbox Code Playgroud)

可能吗?

c# overloading operator-keyword

17
推荐指数
2
解决办法
1507
查看次数

nil的未定义方法'>':NilClass <NoMethodError>

好的,我有以下代码

 def update_state_actions
    states.each do |state|
      @state_turns[state.id] -= 1 if @state_turns[state.id] > 0 && state.auto_removal_timing == 1
    end
  end
Run Code Online (Sandbox Code Playgroud)

现在在......

 @state_turns[state.id] -= 1 if @state_turns[state.id] > 0 && state.auto_removal_timing == 1
Run Code Online (Sandbox Code Playgroud)

它说错误

in 'block update_state_actions' : Undefined method '>' for nil:NilClass <NoMethodError>
Run Code Online (Sandbox Code Playgroud)

错误的原因是什么?怎么来>被认为是一种方法,但它是一个逻辑运算符?

ruby methods operator-keyword

17
推荐指数
1
解决办法
7万
查看次数