问题标签 [rationale]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1451 浏览

c++ - 为什么 std::stof、std::stod 和 std::stold 处理带有异常的错误?

为什么 std::stof、std::stod、std::stold 抛出异常的原因是什么?

http://en.cppreference.com/w/cpp/string/basic_string/stof

当通过异常处理错误不合适时,输入错误是一个常用的例子(通常用“异常情况”的古怪循环推理来表达,但仍然是一个很好的例子)。其他错误处理机制似乎并没有在 C++ 标准库中以某种方式被禁止。例如,另一个 C++11 新成员, family,使用返回类型std::unordered_map::insert中的第二个元素表示失败。std::pair<iterator,bool>函数内部的失败std::unordered_map::insert似乎比输入错误更“异常”。如果不尝试插入,则可以保证插入成功,但如果不进行解析,则无法保证解析成功。

我只是想知道这些功能被纳入标准时的基本原理是什么。希望它在某个地方发布,或者委员会成员可以顺便来对此有所了解。我并不是要求对异常与其他机制的优缺点进行全面的论述。

0 投票
2 回答
181 浏览

clojure - 为什么你不能 rseq 一个 RSeq?

为什么不能rseq接受之前调用的结果rseq

我在文档字符串中读到参数必须是(实际上,“可以是”)向量或排序映射,上面表明它不能是RSeq,所以我已经知道了。我想知道的是:这种限制有充分的理由吗?这只是一个疏忽,还是这个限制提供了一些重要的好处?

另外,除了从不打电话之外,是否有一个方便的解决方法rseq?很难知道,当您RSeq从一个函数返回一个函数时,其他地方的其他函数是否会调用rseq它。

我之所以这么问,是因为看到我的代码因为如此令人惊讶原因抛出异常令人沮丧。如果我知道为什么这是有道理的,我可能不太可能犯这种错误和类似的错误。

0 投票
1 回答
60 浏览

indexing - Rails 5 连接表生成默认值的基本原理

Rails 5 命令rails g migration create_foo_bar_join_table生成以下迁移:

class CreateFooBarJoinTable < ActiveRecord::Migration[5.0] def change create_join_table :foos, :bars do |t| # t.index [:foo_id, :bar_id] # t.index [:bar_id, :foo_id] end end end

为什么生成器使用复合键存根两个(双向)索引?还有为什么他们被注释掉了?我对此感到困惑,找不到任何明确的解释来说明这些建议的默认值。

上述索引是否比以下索引更高效? ... create_join_table :foos, :bars do |t| t.index :foo_id t.index :bar_id end ...

0 投票
2 回答
74953 浏览

git - “git submodule init”有什么意义?

背景

要填充存储库的子模块,通常会调用

在这种用法中,git submodule init似乎只做一件事:.git/config填充.gitmodules.

那有什么意义呢?

不能git submodule update简单地使用来自的信息.gitmodules吗?这将避免两者:

  • 不必要的命令 ( git submodule init);和
  • 不必要的数据重复(.gitmodules内容到.git/config)。

问题

任何一个:

  • 有一些git submodule init我不知道的用例(在这种情况下,请赐教!);要不然
  • git submodule init是粗鲁的,可以在 Git 中弃用而不会造成任何伤害。

以下哪一个是真的?

0 投票
1 回答
325 浏览

c++ - libc++ 的 std::basic_string 的 16 字节对齐模式背后的原因是什么?

在查看std::basic_string 的 libc++ 实现时,我在第 1374 行遇到了这个问题(在撰写本文时):

该值用于后续的对齐计算,字符串大小请求被四舍五入为该数字的倍数。

我可以接受正在进行一些舍入以避免内存碎片或其他什么,但是......

我想知道在这里使用硬编码的16作为数字是否有任何特定的理由,或者它是否只是用作“漂亮的'圆形'数字”。

对于 64 位机器,16相当于alignof( std::max_align_t ),这在某种程度上是有意义的。__alignment但是对于 32 位架构也使用完全相同的值,所以...?

0 投票
1 回答
151 浏览

c++ - 为什么我可以部分专门化但不能完全专门化 C++ 中的成员模板?

IMO,C++ 模板规则似乎过于严格,并且定义了编译器实现。但是在这里,我有一个特定的行为,我很难理解。

在下面的问题中,我有意识地尽量避免明确地专门化父类。

问题是,我可以部分专门化一个成员,但不能完全专门化它。这确实违反直觉,因为您可以轻松地将虚拟模板添加到完全专业化的模板并使其部分专业化。这里发生了什么??

重要编辑:这很重要,因为我们知道,如果不专门化类,就不能专门化成员函数(这可以看作是这个问题的组合,需要部分专门化,而 c++ 没有允许部分专门化的函数。我不知道这些是否相关,但至少它们是一致的),因此,如果你想在你的类中使用一个你可以专门化的函数,你就会被使用函子困住。最重要的是,您需要添加一个虚拟模板参数才能使其正常工作!

这有效:

但这不会:

编辑:Sean F. 在评论中指出编译器很难选择专业化。但这里的问题是,部分专业化并不能解决这个问题。所以这不可能是答案。

0 投票
1 回答
410 浏览

xslt - 结果树片段背后的基本原理是什么?

XSLT 1.0 为 XPath 1.0 提供的数据类型添加了一个额外的数据类型:结果树片段。

这种额外的数据类型称为结果树片段。变量可以绑定到结果树片段而不是四种基本 XPath 数据类型(字符串、数字、布尔值、节点集)之一。结果树片段表示结果树的片段。结果树片段等同于仅包含单个根节点的节点集。但是,结果树片段上允许的操作是节点集上允许的操作的子集。仅当允许对字符串进行操作时才允许对结果树片段进行操作(对字符串的操作可能涉及首先将字符串转换为数字或布尔值)。特别是,不允许在结果树片段上使用 、 和 运算///。 —[]
https://www.w3.org/TR/xslt-10/#section-Result-Tree-Fragments

在我看来,这似乎毫无意义。我明白为什么有人要这样做!结果树片段看起来就像是节点集的垃圾版本,需要两个中间变量和一个语言扩展来允许程序员解决这个看似任意的限制。

为了进一步说明结果树片段的无用性,这是我的兼容性垫片偷了放在一起exsl:node-set在 MSXSL 中复制:

实际上只是返回未更改的结果树片段这表明 MSXSL 甚至不费心将结果树片段实现为不同的类型,只是将其视为与 a 相同node-set,进一步表明它首先没有真正的意义!

为什么存在结果树片段?

  • 用例是什么?
  • 为什么要添加它们?
  • 为什么不只使用节点集?
0 投票
2 回答
5116 浏览

c++ - 我们需要 std::as_const() 做什么?

C++11 给了我们std::add_const;使用 C++17,我们有一个新的结构 - std::as_const(). 前者只是const在你提供的类型之前加上一个。第二个是正确的(a 的模板)函数,而不是类型特征,它似乎做同样的事情 - 除了当类型是右值引用时,在这种情况下它不能使用。

我不太明白提供的动机std::as_const()。为什么我们还需要它std::add_const

0 投票
0 回答
382 浏览

c++ - PCL `shared_ptr` 接口背后的基本原理

许多 PCL 接口只接受shared_ptr<T>参数(例如boost::shared_ptr< PointCloud>)。[旁白:就是这样boost::shared_ptr,不是std::shared_ptr另一个问题,但应该在即将发布的版本中修复。]

通常,此类接口对于需要管理对象生命周期并防止共享引用对象超出范围的多线程应用程序是一个有效的选项。但是,PCL 不一定在这样的上下文中使用,并且此 API 强制人们在堆上创建许多对象只是为了支持这种 API 样式(并且总是检查nullptr)。

为什么会这样,我还缺少另一个理由吗?
对于本地对象,我现在需要创建一个shared_ptr带有自定义nop删除器对象的对象,以便将其传递给算法。

(如果有更好的论坛可以问这个问题,请lmk。)

0 投票
1 回答
125 浏览

c++ - 为什么 C++ boost 库中的累加器具有类似函数的接口?

在 boost 库中,我们使用这样的累加器:

为什么我们不能像这样定义它的接口:

那么为什么 boost 库中的累加器有一个类似函数的接口呢?它有什么好处?