当前位置: 首页 > 知识库问答 >
问题:

解密有捷径吗

阎涵容
2023-03-14

在这个答案中,我编写了C 17代码:

cout << accumulate(cbegin(numbers), cend(numbers), decay_t<decltype(numbers[0])>{});

这收到了一些关于C型联想性质的负面评论,我很遗憾地说,我同意:(

<代码>衰减\t

数字元素的零初始化类型

是否可以保持与数字元素类型的关联,但不能键入30个字符来获取它?

编辑:

我有很多关于累积或从数字[0]中提取类型的包装器的答案。问题是它们需要阅读器导航到辅助位置以读取不亚于初始化代码的解决方案decay_t

我们必须做得更多的唯一原因是:decltype(数字[0]),因为数组下标操作符返回一个引用:

错误:“int”类型的右值表达式转换为“int”类型无效

有趣的是,关于decltype的参数:

如果对象的名称带括号,则将其视为普通左值表达式

然而,decltype((数字[0])仍然只是对数字元素的引用。因此,最终,这些答案可能会尽可能地简化初始化:(

共有3个答案

曹高阳
2023-03-14

我认为你能做的最好的事情就是在某个地方把这个因素考虑进去:

template <class It, class R = std::decay_t<decltype(*std::declval<It>())>>
R accumulate(It first, It last, R init = 0) {
    return std::accumulate(first, last, init);
}

std::cout << accumulate(cbegin(numbers), cend(numbers));

或者更一般地说:

template <class Range, class T =
        std::decay_t<decltype(*adl_begin(std::declval<Range&&>()))>>
T accumulate(Range&& range, T init = 0) {
    return std::accumulate(adl_begin(range), adl_end(range), init);
}

cout << accumulate(numbers);

其中,adl\U begin是adl的一个版本。

当然,从技术上讲,我们仍然有你之前试图避免的所有积垢。。。但至少现在你再也不用看它了?

段曦
2023-03-14

个人偏好:我发现decay_tdectypedecval舞蹈非常烦人且难以阅读。

相反,我将通过类型traitvalue\t使用额外级别的间接寻址

template<class It>
using value_t = typename std::iterator_traits<It>::value_type;

template<class It, class R = value_t<It>>
auto accumulate(It first, It last, R init = R{}) { /* as before */ }

闻人英韶
2023-03-14

虽然我总是选择按照@Barry编写一个辅助函数,但如果数字是一个标准容器,它将导出value_type类型,因此您可以节省一点复杂性:

cout << accumulate(cbegin(numbers), cend(numbers), decltype(numbers)::value_type());

更进一步,我们可以定义这个模板函数:

template<class Container, class ElementType = typename Container::value_type>
constexpr auto element_of(const Container&, ElementType v = 0)
{
    return v;
}

这给了我们:

cout << accumulate(cbegin(numbers), cend(numbers), element_of(numbers, 0));
 类似资料:
  • 问题内容: 给定一个未解决的deferred(),然后是一个可能的promise(),可能会也可能不会将其推迟,是否有办法将promise委托给推迟的? 语义应为: $ q文档 仅提及对被拒绝的承诺的处理(而且,仅以某种方式被拒绝的承诺): defered.resolve(value)–使用值解析派生的promise。如果该值是通过$ q.reject构建的拒绝,则将拒绝该promise。 这使得

  • 我的学校开始使用安全的考试浏览器作为在线考试的平台,我想了解更多。我试图了解它的配置文件是如何制作的,以及它们实际上包含什么,所以我开始从这里阅读文档,以便解密其中一个,但我没有做到这一点。你能告诉我去德赛普特a的程序吗。seb文件,假设这是可能的?

  • 问题内容: 我有以下加密数据: 对其进行解密的密码是: (这是来自胡言乱语的例子) 在命令行中使用openssl: 输出为: 使用我的NodeJS应用程序: 我在一行中遇到以下错误。 我想念什么吗?谢谢。 问题答案: 加密的数据以8字节的“魔术”开头,表示存在盐(的ASCII编码)。然后接下来的8个字节是盐。现在是个坏消息:Node.js似乎没有对EVP_BytesToKey方法使用盐: 那是盐。

  • 这样,从加密消息中扫描进来的第一个字母将对应于换位槽中的第三个槽,这将是它被打印出来的地方。然而,我不知道如何将我的想法转化为代码。 电流换位加密密码: 非常基本的换位解密程序

  • 我想解密使用RSA公钥加密的1024位数据。我有权访问 我没有访问私钥指数的权限。没有RSA private exponent和所有这些可用的API,有没有办法解密数据?我正在使用openssl进行RSA操作。我听说有了中文提示therem,我们只需要p、q、指数1、指数2和系数就可以进行RSA解密。但我正在寻找openssl中的API。在openssl中有没有什么有用的方法可以在没有私有指数的情

  • 本文向大家介绍欧拉路径和哈密顿路径,包括了欧拉路径和哈密顿路径的使用技巧和注意事项,需要的朋友参考一下 如果您可以在所有顶点之间绘制一条路径而无需重新绘制同一条路径,则该图形是可遍历的。基于此路径,本章将介绍一些类别,例如欧拉路径和欧拉电路。 欧拉之路 欧拉路径仅包含一次“ G”的每个边缘,至少包含一次“ G”的每个顶点。连通图G如果包含欧拉路径,则被认为是可遍历的。 示例 欧拉路径= dcabd