小编Deb*_*h C的帖子

如何阅读该函数声明

以下代码片段来自: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.fold

我知道泛型类型F是一个可调用的,它实现FnMut并接受两个参数:BSelf::Item,这是迭代器迭代的项目,该可调用的返回类型是B。我的问题是关于 的B类型。没有指定,也没有描述任何约束。我是否可以理解它可以是任何类型?

fn fold<B, F>(self, init: B, f: F) -> B
where
    Self: Sized,
    F: FnMut(B, Self::Item) -> B,
Run Code Online (Sandbox Code Playgroud)

rust

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

为什么编译器抱怨歧义

在下面的代码中,编译器抱怨不明确。为什么?显然我正在传递非 const non & 对象。

\n
#include <stdio.h>\n#include <ranges>\n#include <vector>\n#include <string>\n#include <iostream>\n\nusing namespace std;\ntemplate<class T>\nstring toStr(const T& obj)\n{\n    return obj.toStr();\n}\n\ntemplate<class T>\nstring toStr(T val)\n{\n    return std::to_string(val);\n}\nstruct A\n{\n  string toStr(){return "A";}  \n};\nint main()\n{\n    A a;\n\n    cout << toStr(static_cast<const A&>(a)) << '\\n';\n\n    return 0;\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试在不同的编译器上编译它。效果是相同的。\n我什至尝试将其转换为所需的 const & 类型。没有。

\n
cout << toStr(static_cast<const A&>(a)) << '\\n';\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:

\n
> main.cpp: In function \xe2\x80\x98int main()\xe2\x80\x99: main.cpp:35:18: error: call of\n> overloaded \xe2\x80\x98toStr(const A&)\xe2\x80\x99 is ambiguous    35 |     cout <<\n> toStr(static_cast<const A&>(a)) << '\\n';\n>       | …
Run Code Online (Sandbox Code Playgroud)

c++

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

标签 统计

c++ ×1

rust ×1