当前位置:  开发笔记 > 编程语言 > 正文

这个表达式有效吗?

如何解决《这个表达式有效吗?》经验,为你挑选了1个好方法。

我遇到了这段代码:

std::string str;
std::getline(std::cin, str);
std::string sub = str.substr(str.find('.') + 1);

第一反应是 - 这是无效的代码.但经过一些想法似乎并不那么简单.那么它是有效的C++表达式(具有可预测的行为)吗?

PS如果不是那么清楚问题主要与'.'时会发生什么有关.不会被发现str,但不限于此,因为可能存在其他问题.



1> Armen Tsirun..:

str.find('.')返回字符串中第一次出现的字符的索引.substrwith一个参数返回从给定索引开始的字符串的后缀.那么该行的作用是返回第一个点后面的字符串尾部.所以,如果str"hello.good.bye",sub将会good.bye.

然而,潜在的代码问题,如果字符串不事实上包含任何圆点.它将返回整个字符串.这可能是也可能不是.发生这种情况是因为如果没有点,find则返回npos,这是std::string::size_type可以容纳的最大数字.添加1到它,你将得到0(这是无符号类型的行为,模2 n).

所以代码总是具有可预测的行为.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有