gcc有一个有用的标志-Wconversion
,当存在从较宽类型到较窄类型的隐式转换时会产生警告,可能会丢失信息.不幸的是,它有以下......无益......行为.
考虑这个程序:
int main(void) {
short x = 1;
x = x+x;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用-Wconversion编译它会产生
nonsense.c: In function 'main':
nonsense.c:3:8: warning: conversion to 'short int' from 'int' may alter its value [-Wconversion]
Run Code Online (Sandbox Code Playgroud)
这是公平的; 在大多数平台上,如果发生这种情况,你会做一些你可能没想到的事情x==0x8000
.(获得此警告的实际机制:操作数+
受"通常的算术转换"的影响,将它们扩展为int;因此结果也是int类型;然后分配回来x
是从更广泛的隐式转换到较窄的类型.)但是假设你确实期望并打算这种行为.(您正在模拟一个16位处理器,或一个16位移位寄存器;或者您知道x
此代码中可能值的范围,它永远不会溢出.)您可以通过输入显式转换来告诉编译器:
int main(void) {
short x = 1;
x = (short)(x+x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后它不会抱怨.
到现在为止还挺好.但是,如果这是造成麻烦的分配是一个复合赋值- ,,+=
等-那么,只要我可以看到有没有办法摆脱这种警告,因为没有代码中的任何点在哪你可以插入显式的演员表.*=
<<=
这意味着,例如,你不能拥有所有
int
.这似乎很难过.
所以,问题是:有一个解决这个 …
IObjectTest是一个具有单个布尔测试(Object o)方法的接口
FilteringIterator是迭代器的实现,其与另一个迭代器和一个IObjectTest实例初始化:新FilteringIterator(myIterator,MYTEST).然后,您的FilteringIterator将允许迭代'myIterator',但跳过任何未通过'myTest'测试的对象.
由于"hasNext"操作实际上涉及重复移动底层迭代器,直到到达下一个匹配项.问题是如何将it迭代器移回迭代器,因为hasNext不应该移动底层迭代器.
[这是冗长而充满细节的.我的具体问题由下面的粗体字问题引入.]
摘要
我们在valgrind下运行一些测试套件,遇到一个对我来说没什么意义的错误.我正在寻找有关更详细地弄清楚可能出错的建议.
所有这些都闻起来好像真正的问题在其他地方:某些东西正在变得腐败并导致后来的混乱.但这是valgrind报告的第一个问题,所以如果在其他地方有内存踩踏,那么valgrind就无法抓住它.我怀疑要么我错过了一些明显的东西,要么有一个微妙的问题,那些具有比我更有专业知识的人可能能够指出我.
一些细节
以下是一些细节和一些具体问题.
这是在x64硬件上运行Ubuntu 14.04的Linux机器上.
这是valgrind在一个相当典型的例子中的抱怨:
==14259== Invalid write of size 8
==14259== at 0x662BBC9: __printf_fp (printf_fp.c:663)
==14259== by 0x6629792: vfprintf (vfprintf.c:1660)
==14259== by 0x664D578: vsnprintf (vsnprintf.c:119)
==14259== by 0x52DCE0F: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==14259== by 0x52E3263: std::ostreambuf_iterator<char, std::char_traits<char> > std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::_M_insert_float<double>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, char, double) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==14259== by 0x52E354F: std::num_put<char, std::ostreambuf_iterator<char, std::char_traits<char> > >::do_put(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&, char, double) const …
Run Code Online (Sandbox Code Playgroud) 有谁知道如何破坏javascript(jquery)函数?我正在使用jquery"selectable",并且在可选择的"stop"事件上触发了函数调用"edit".
在这个"编辑"功能中,我有很多"点击"事件嵌套开关功能,每个"点击"事件中都有很多功能.我的问题是,每当我触发"可选"功能时,"edit"功能内的事件再次被触发,但之前的功能和事件仍然存在.我现在做的是取消绑定功能"编辑"中的每个事件在可选择的"开始"甚至.
这是内存泄漏问题吗?有没有办法在javascript中"破坏"功能?我试图在函数结束时将函数声明为null但这不起作用.其中的功能和事件仍然存在.
谁有线索?
演示页面 - > http://dreamerscorp.com/test/test01/javascript_destory_test.html
编辑2009/10/31 :)非常感谢您的帮助,您的评论对我非常有用,再次感谢!!!
我正在拼凑一些东西,列出我的 Windows 盒子上的每个窗口,并且似乎(仅)对于我的一个窗口 GetWindowRect 返回一个具有非常负的 y 坐标的矩形。
可能的复杂情况:(1) 我有多个显示器,但 (1a) y 坐标非常负,约为 -24000,并且 (1b) 两个显示器上的其他窗口不显示此效果;(2) 我正在使用 VirtuaWin 虚拟桌面工具,但 (2a) 其他窗口,在多个不同的虚拟桌面和两台显示器上,不显示此效果;(3) 我使用 pywin32 模块在 Python 中完成所有这些工作。
相关窗口是 Windows 资源管理器窗口。它的大小或位置并不异常(至少从肉眼看来)。当前活动虚拟桌面上的资源管理器窗口不会显示此行为,但是当我在其他虚拟桌面上创建资源管理器窗口时,它们会显示相同的意外效果。
我运行的是 Windows XP 和 VirtuaWin 4.3 版本。
发生什么了?
我计算了以下内容:
>>> float(10.0-9.2)
0.800000000000000*7*
Run Code Online (Sandbox Code Playgroud)
即使做10.0-9.2也给出了上述结果.为什么额外的7会出现在结果中?
我在python 3.2上.
我只是在Python中学习编程以获得乐趣.我正在写一个回文程序,我想到了如何进一步改进它.
我想到的第一件事是防止程序必须双向浏览整个单词,因为我们只是检查回文.然后我意识到只要第一个和最后一个字符不匹配就可以打破循环.
然后我在课堂上实现它们,这样我就可以调用一个单词并返回true或false.
这就是该计划截至目前的情况:
class my_str(str):
def is_palindrome(self):
a_string = self.lower()
length = len(self)
for i in range(length/2):
if a_string[i] != a_string[-(i+1)]:
return False
return True
this = my_str(raw_input("Enter a string: "))
print this.is_palindrome()
Run Code Online (Sandbox Code Playgroud)
我是否可以进行其他任何改进以提高效率?
最近,我正在做一个关于移植的工作.我遇到了这样一个问题:有些Windows API,如_clearfp(),_ statusfp()等,那么我在Linux中找不到相应的功能.
所以我来这里寻求帮助.
我正在创建一个网页(第一次),我正在尽可能多地遵循CSS规则和标签.但是,我遇到了空白问题.我已经强调了第一行文字,但现在第二行似乎已经在下面漂移了.有没有办法让它更舒服一点,我希望第二行文字恰好在上面一行之下.
body,td,th {
color: #000000;
}
body {
margin: 0;
padding: 0;
padding-top: 6px;
text-align: center;
background-color: #FFFFFF;
}
#centered
{
width: 800px; /* set to desired width in px or percent */
text-align: left; /* optionally you could use "justified" */
border: 0px; /* Changing this value will add lines around the centered area */
padding: 0;
margin: 0 auto;
}
.style3 {
font-size: 32pt;
color: #666666;
margin-left: 0px;
border-bottom: 3px double;
}
.style5 {
margin-left: 390px;
font-size: 32pt; …
Run Code Online (Sandbox Code Playgroud) 我们有一个.NET Web服务,它返回JSON,包括字符串格式的日期,如下所示:2012-04-30T00:00:00 + 12:00.
在javascript中,我想要排除月份不是当前月份的日期.因此,在上述日期,月份为04(4月),当月为5月(无论如何都在新西兰).所以,我想忽略这个记录,例如,在伪代码中:
if(vMonth == CurrentMonth){
dothis();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
c++ ×2
java ×2
javascript ×2
python ×2
c ×1
casting ×1
css ×1
eglibc ×1
gcc ×1
html ×1
iterator ×1
jquery ×1
linux ×1
memory-leaks ×1
palindrome ×1
porting ×1
python-3.x ×1
selectable ×1
swing ×1
valgrind ×1
visual-c++ ×1
warnings ×1
winapi ×1
windows ×1