今天为同事做代码审查时,我看到了一件奇怪的事情.他用这样的花括号包围了他的新代码:
Constructor::Constructor()
{
existing code
{
New code: do some new fancy stuff here
}
existing code
}
Run Code Online (Sandbox Code Playgroud)
如果有的话,结果是什么?这可能是什么原因?这种习惯来自哪里?
编辑:
根据输入和下面的一些问题,我觉得我必须在问题上添加一些,即使我已经标记了答案.
环境是嵌入式设备.C++服装中包含许多遗留的C代码.有很多C转向C++开发人员.
这部分代码中没有关键部分.我只在代码的这一部分中看到过它.没有完成主要的内存分配,只是设置了一些标志,而且有点笨拙.
大括号包围的代码类似于:
{
bool isInit;
(void)isStillInInitMode(&isInit);
if (isInit) {
return isInit;
}
}
Run Code Online (Sandbox Code Playgroud)
(不要介意代码,只需坚持花括号......;))花括号之后还有一些比特麻烦,状态检查和基本信号.
我与那个人谈过,他的动机是限制变量的范围,命名冲突,以及其他一些我无法真正接受的冲突.
从我的POV看起来相当奇怪,我不认为花括号应该在我们的代码中.我在所有答案中都看到了一些很好的例子,说明为什么用花括号包围代码,但是你不应该把代码分成方法吗?
我有一个任务,我想找到最接近目标的字符串(因此,编辑距离),而不是同时生成它们.我想我会在初始化最近的编辑距离时使用高水位技术(低,我猜),Inf以便任何编辑距离更近:
use Text::Levenshtein;
my @strings = < Amelia Fred Barney Gilligan >;
for @strings {
put "$_ is closest so far: { longest( 'Camelia', $_ ) }";
}
sub longest ( Str:D $target, Str:D $string ) {
state Int $closest-so-far = Inf;
state Str:D $closest-string = '';
if distance( $target, $string ) < $closest-so-far {
$closest-so-far = $string.chars;
$closest-string = $string;
return True;
}
return False;
}
Run Code Online (Sandbox Code Playgroud)
但是,Inf是一个Num所以我不能这样做:
分配到$ nearest-so-far的类型检查失败; 预期Int但得到Num(Inf)
我可以制定约束Num并强制执行: …
我的WEB-INF/lib目录中有一个jar文件.在那个jar里面是一个META-INF/resources目录,里面有一个文件(image.jpg).据我了解servlet 3.0 API,当我在Tomcat 7下将其部署为我的Web应用程序的一部分时,我应该可以去
http://host/context/image.jpg
Run Code Online (Sandbox Code Playgroud)
并查看从jar中加载的图像.但相反,我得到404错误.就好像servlet_api没有从我的jar中加载资源,即使文档说它应该.
我究竟做错了什么?是否需要在我的web.xml文件中放置一个字段,告诉tomcat加载这些资源并将它们提供给Web浏览器?
我有几个函数可能会返回多个计算inf,如下所示:
In [10]: numpy.exp(5000)
Out[10]: inf
Run Code Online (Sandbox Code Playgroud)
我宁愿它返回最大浮点值:
In [11]: sys.float_info.max
Out[11]: 1.7976931348623157e+308
Run Code Online (Sandbox Code Playgroud)
我可以在每次inf弹出时检查,或者将每个计算包装在一个inf向下舍入到所需浮点数的函数中.但是,我真的很喜欢每个函数开头的简单hack,例如:
inf = sys.float_info.max
Run Code Online (Sandbox Code Playgroud)
这显然不起作用.有一种聪明的方法吗?谢谢!
我正在尝试将Google Test(gtest)代码移植到VxWorks 5.5.严重的缺点是开发环境Tornado 2.2使用古老的GCC编译器版本2.96.
在分析代码时,我找到了部分代码,gtest.h我不明白!这个C++模板类是如何运作的?
// ImplicitlyConvertible<From, To>::value is a compile-time bool
// constant that's true iff type From can be implicitly converted to
// type To.
template <typename From, typename To>
class ImplicitlyConvertible {
private:
// We need the following helper functions only for their types.
// They have no implementations.
// MakeFrom() is an expression whose type is From. We cannot simply
// use From(), as the type From may not have …Run Code Online (Sandbox Code Playgroud) 我似乎找不到在 matplotlib 中绘制具有无限边长的矩形补丁的方法,也找不到任何关于是否有办法做到这一点的文档或对话。
基本上:
from matplotlib.patches import Rectangle
import numpy as np
x_min = 0
x_range = 1
y_min = -np.inf
y_range = np.inf
Rectangle((x_min, y_min), x_range, y_range)
Run Code Online (Sandbox Code Playgroud)
我意识到 numpy 中的 inf - inf 返回 nan,这可能是在某个时候计算出来的。
无论如何,查看 Rectangle 的代码并没有让我更接近解决方案,所以我想我会检查一下这里是否有人能想出解决办法。
我有一组值 a[i]。
然后我计算
for(...){
b[i] = log(a[i]);
}
Run Code Online (Sandbox Code Playgroud)
然后我总结
for(...){
s += c[i] * b[i];
}
Run Code Online (Sandbox Code Playgroud)
到目前为止这没有问题。
但对于某些人来说,i我a[i]可能为零并导致b[i] = log(0) = -Inf. 对于这些i,c[i]也为零 - 这些是一些无效的数据点。但zero*-Inf似乎给了NaN,我的总和搞砸了......
有没有办法c[i] * b[i]在c[i]is = 0时总是有= 0?
我看到的唯一方法是将所有零设置a[i]为一个小的非零值或检查零,但可能有更好的解决方案。
我使用 C++ 和std数学函数,但我正在寻找一种尽可能通用的方法。
我的数据具有以下示例的格式(此处的规模较小):
a <- c(NaN, Inf, 1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我知道如果我在R中使用:
min(a, na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)
要么
max(a, na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)
在NaN将被忽略,但不是Inf,所以在min(a, na.rm = TRUE)结果1(不考虑NaN因na.rm = TRUE),但结果max(a, na.rm = TRUE)是Inf.
有没有办法在R中得到一个向量的最大值和最小值,也忽略了无穷大Inf,以及NaN被忽略了?
我感谢任何帮助.