小编Cyb*_*lin的帖子

`operator string()` 类型转换函数的奇怪行为

我有一个C类,我想string使用operator string()语法将其转换为,但正如我在评论中所写,发生了一些奇怪的事情。

class C {
public:
    operator string()
    {
        return string("anything");
    }
};
int main()
{
    C c;
    cout << string("test:").append(c) << endl; //success
    //cout << string("test:")+c<< endl;//fail
    //cout << c.append("test:") << endl;//fail
    cout << string("test:") + static_cast<string>(c) << endl;//success
}
Run Code Online (Sandbox Code Playgroud)

c++ type-conversion implicit-conversion

4
推荐指数
1
解决办法
91
查看次数

按第一个元素升序对 Vec&lt;Vec&lt;i32&gt;&gt; 进行排序,当第一个元素相等时按第二个元素降序排序

例如 [[5,6][2,3][2,5][2,9][1,6]] 首先按第一个元素升序排序,当一个元素相等时,按第二个元素排序元素按降序排列,结果为 [1,6],[2,9],[2,5],[2,3],[5,6]

rust

3
推荐指数
1
解决办法
670
查看次数

为什么这个 lambda 可以在这里使用,在 Arrays.sort() 中需要一个比较器

我是 Lambda 的新手,这是教科书(简而言之 java)所说的内容:

只有某些类型才有资格成为 lambda 的目标。目标类型也称为功能接口,它们必须:

  • 成为接口
  • 只有一种非默认方法(但可能有其他默认方法)

这本书给了我一个例子:

File dir =new File("/src");
String[] fileList =dir.list((d,fName)->fName.endWith(".java"))
Run Code Online (Sandbox Code Playgroud)

我知道这个 lambda 会转换成一个FilenameFilter接口,@FunctionalInterface它确实与书中的描述相符

在此处输入图片说明

但是我可以在这里使用 lambda 来sort()期望收到一个Comparator

        int n =12;
        Function<String,String[]> f = (s) -> {
            String[] ans = new String[n];();
            for (int i = 0; i < n; i++) {
                ans[i] = s;
            }
            return ans;};
        Arrays.sort(f.apply("colin"),(String s1 ,String s2)->{
            return s1.length() - s2.length();});
Run Code Online (Sandbox Code Playgroud)

我查看了它的源代码,发现Comparator是一个@FunctionInterface 在此处输入图片说明

但它有两个非默认方法compare和。equals它与书中所说的不同。

java lambda functional-programming java-stream

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