【发布时间】:2016-07-31 23:34:41
【问题描述】:
当我注意到它从字符串值“25”返回整数值 25 时,我在程序中使用 std::stoi() 将字符串值转换为整数值。
这让我很困惑,因为当字符串以非数字开头时,invalid_argument 会引发异常。例如,“,25”会抛出一个 invalid_exception。基于此,我假设如果整个字符串值不是数字,则会引发异常。这不是我意识到的情况。例如,“25,543”将返回 25。
我最终创建了自己的函数来调用 std::stoi() 只有当整个字符串值是一个数字,否则,抛出一个 invalid_argument 异常。
话虽如此,我想知道为什么它是这样设计的,或者我不明白它是如何完全工作的。如果我要不断得到这样的惊喜,我宁愿不继续使用它。
更新:我检查了 cppreference.com 的文档,但我没有足够的经验来完全理解它。我试图对 std::stoi 定义进行逆向工程,但发现它远远超出了我的经验水平。我发布这个问题的目的是让其他人了解它的功能和了解细节的愿望。
【问题讨论】:
-
您是否考虑过查阅文档?
-
那是文档。如果你不能理解它,请更加努力。如果无法理解所提供的文档,您将在这项业务中一无所获,并且您肯定会“不断获得惊喜”,直到您克服这一困难。但我没有看到任何关于“尽可能多的字符来形成有效的 base-n(其中 n=base)整数表示并将它们转换为整数值”的任何不清楚的地方,这完全回答了你的问题。
-
文档明确指出,它需要尽可能多的指定基数中的数字字符。
,不是任何基数中的数字,所以它停在那里。你的惊讶是无法理解的。 -
@ProfounDisputes 我知道,但如果你看过这个例子,你就不会对函数表现出的行为感到惊讶
-
我根本没有使用任何缩写,并且您引用的文档中没有任何内容超出任何称职的程序员。这里的问题不是这样,这是您对标准文档的难以理解的困惑。您将不得不克服这一点,而在线/交互式资源不是解决问题的方法。您不必在这里就已经在您已经找到的地方记录的基本内容提出问题。
标签: c++ string int invalid-argument