我正在阅读为什么Java中的数组协方差不好(Why are arrays covariant but generics are invariant?)。如果Dog是Animal的子类型,则Dog[]是Animal[]的子类型。这是一个问题,因为可以这样做: Animal[] animals = new Dog[1];
animals[0] = new Cat();
这与正确实施的泛型不同。
在Haskell考虑以下代码: let factorial n = if n < 2 then 1 else n * factorial (n-1) in factorial 3
我看到这个解释在这样的顺序评估程序: 这是一个结合。首先评估定义并评估“in”之后的部分。 这是一个定义。评估身体,然后将身体与名称关联起来。 这是一个lambda。捕捉环境,关闭并返回。 定义的主体被评估,现在写入
void g(int n, decltype(n) = 0); // ok
void f(int n, int = n); // error : default argument references parameter 'n'
int main()
{
f(1); // want it to be same as f(1, 1);
}
为什么C++不允许参数成为默认参数?
struct A
{
void f() {}
};
void f() {}
int main()
{
auto p1 = &f; // ok
auto p2 = f; // ok
auto p3 = &A::f; // ok
//
// error : call to non-static member functio