Sea Star

往者不可谏,来者犹可追

0%

Effective Go

  • 指针和值的方法有所不同。针对值的方法,可以作用于值和指针;针对指针的方法,只能作用于指针。
    主要的不同是 值的方法无法修改值本身,而指针可以
    例外:当对值调用原本作用于指针的方法时,如果值可以取地址,则编译器会帮忙转换。

    type Size int
    func (s *Size) Add(a Size) {}
    
    var s Size
    s.Add(1) // 等价于 (&s).Add(1),此处编译器帮忙进行了转换
    

c++中的lambda可以理解为匿名的闭合类。labmda实例可以被当作函数调用(仿函数functor type)。
std::function<R(T1, T2, …, TN)>是一个仿函数类,可以将不同的lambda类(参数和返回值相同)进行统一的调用处理。实际上,闭合类型会被隐式转换为std::function。

当以二进制方式(binary mode)打开文件时,使用fgetc()很可能读到0xff字节。

由于EOF恰恰就是-1,也即0xff, 同时fgetc()出错时,也返回-1,所以当fgetc()返回-1时,究竟是文件尾?还是字节0xff?还是操作出错呢?

这时候就需要feof()和ferror()出场了。