This question already has answers here:
Is Short Circuit Evaluation guaranteed In C++ as it is in Java?
(2个答案)
我在写一个函数,到目前为止
我的主要问题是州
因为
(1)我写作的方式被认为是可读的
(2)它可能会导致问题,因为它假设从左到右有条件地执行由
希望对计算机科学概念有更深入了解的人能向我解释这一点。
作为奖励,有没有人有更好的方法来做我试图做的这个功能?我所要做的就是获取包含在字符串中的十进制表示,同时跟踪在获取十进制时解析的字符数。我不能使用
(2个答案)
我在写一个函数,到目前为止
size_t CalculusWizard :: _grabDecimal ( std::string::const_iterator it1, std::string::const_iterator it2, std::string & ds )
{
/*
it1: iterator to the beginning of the decimal string
it2: iterator to the 1-off-the-end of the range of which the decimal can span
ds: string to hold the decimal representation
Reads the decimal in the range [it1, it2) into the string ds
*/
ds.clear();
size_t ncp = 0; /* # of characters parsed */
if (it1 != it2 && *it1 == '-') ds.push_back(*it1++); /* Handle possible minus sign */
bool foundDot = false;
while (it1 != it2)
{
if (*it1 == '.')
{
if (foundDot) break;
else foundDot = true;
}
else if (_digMap.count(*it1) > 0)
{
// ...
}
else
{
break;
}
++it1;
}
return ncp;
}
我的主要问题是州
if (it1 != it2 && *it1 == '-')
。我是说它是一种更简洁的写作方式if (it1 != it2)
{
if (*it == '-') // ...
}
因为
it2
可能不在字符串末尾,所以我希望避免出现意外行为。但我想知道(1)我写作的方式被认为是可读的
(2)它可能会导致问题,因为它假设从左到右有条件地执行由
&&
分隔的语句。希望对计算机科学概念有更深入了解的人能向我解释这一点。
作为奖励,有没有人有更好的方法来做我试图做的这个功能?我所要做的就是获取包含在字符串中的十进制表示,同时跟踪在获取十进制时解析的字符数。我不能使用
stod
,因为我丢失了所需的信息。 最佳答案
1)当然……如果其他程序员看不懂,这种语言就不会有&&
。
2)不-不会造成问题请注意,&&
运算符是一个“短路”逻辑运算符,左手边在右手边之前计算,因此当p && *p == 2
是一个p
时,即使是像nullptr
这样的代码也保证安全。
至于如何提高功能…我建议使用std::istringstream
来解析字符串表示中的数字(如果要解析字符串的一部分,请使用std::string::substr
),然后可以在流上使用tellg
来查看解析了多少。
一个更“C”风格的替代方法是使用strtod-str_end
参数可以捕获第一个未转换字符的位置。
10-06 02:02