请考虑以下代码(p属于类型unsigned char*且bitmap->width属于某种整数类型,具体哪个是未知的,取决于我们正在使用的某个外部库的版本):
for (unsigned x = 0; x < static_cast<unsigned>(bitmap->width); ++x)
{
*p++ = 0xAA;
*p++ = 0xBB;
*p++ = 0xCC;
}
Run Code Online (Sandbox Code Playgroud)
值得优化它[...]
可能存在这样一种情况,即通过编写可以产生更有效的结果:
unsigned width(static_cast<unsigned>(bitmap->width));
for (unsigned x = 0; x < width; ++x)
{
*p++ = 0xAA;
*p++ = 0xBB;
*p++ = 0xCC;
}
Run Code Online (Sandbox Code Playgroud)
...或者编译器优化是否微不足道?
您认为什么是"更好"的代码?
编辑(Ike)的注意事项:对于那些对三角形文本感到疑惑的人来说,原来的问题,如同措辞一样,非常接近于偏离主题的领域,并且尽管有积极的反馈,但非常接近于被关闭.这些已经被打乱了.但是,请不要惩罚那些解决这些问题的受影响部分的回答者.
我正在尝试使用Qt在linux中编写触摸事件.我的触摸屏工作,但是当我触摸屏幕时,我得到鼠标事件而不是触摸事件.鼠标光标移动到我触摸屏幕的位置.如果这是Qt问题或在操作系统级别发生的事情,我不知道.
我在Debian Jessie上使用Qt 5.4.0.
我已经设法使用了一个窗口图标XIconifyWindow,但是还没有设法恢复它.我尝试了以下方法:
XMapRaised (display, window);
Run Code Online (Sandbox Code Playgroud)
和:
XMapWindow (display, window);
Run Code Online (Sandbox Code Playgroud)
和:
XClientMessageEvent ev;
std::memset (&ev, 0, sizeof ev);
ev.type = ClientMessage;
ev.window = window;
ev.message_type = XInternAtom(display, "WM_CHANGE_STATE", False);
ev.format = 32;
ev.data.l[0] = NormalState;
XSendEvent (display, RootWindow(display, XDefaultScreen(display)), False,
SubstructureRedirectMask |SubstructureNotifyMask, (XEvent*)&ev);
XFlush (display);
Run Code Online (Sandbox Code Playgroud)
没有成功.我正在使用Debian Jessie和GNOME 3.14.0.
在Linux中,当信号被发送到进程/线程(无论出于何种原因)时,是否立即调用信号处理程序(假设有一个,并且信号没有被阻止)?
我的意思是,我很确定在处理信号的进程/线程中它将立即被调用,但我的意思是相对于其他进程/线程。
如果立即调用处理程序,它是否也会使相应的进程/线程处于活动状态(以便其正常执行立即继续)?
编辑
由于我原来的问题似乎被误解了,我将尝试用一个例子再次解释。
假设我的计算机有一个 CPU,正在运行 2 个进程,进程“A”和进程“B”。并假设它们都没有在系统调用中阻塞(如sleep)。通常,我猜,操作系统会在一小段时间后在执行进程“A”和进程“B”之间切换(例如,执行进程“A”100毫秒,然后处理“B”100毫秒,然后再次处理A 100毫秒) , ETC。)。假设进程“A”现在是活动进程(即它现在占用CPU)。现在假设进程“A”向进程“B”发送信号(或者,操作系统出于某种原因将该信号发送给进程“B”)。进程“B”已为该信号注册了一个处理程序,并且没有阻止它。所以问题是,操作系统现在会立即停止执行进程“A”并切换到执行进程“B”的信号处理程序吗?如果答案是肯定的,那么它之后会立即继续执行进程“B”(正常代码,而不是信号处理程序),还是切换回执行进程“A”,并且仅在一小段时间后恢复执行进程‘B’?
然后可以针对线程而不是进程询问相同的问题。
我尝试合并:
hg me -r <some-revision>
Run Code Online (Sandbox Code Playgroud)
得到:
<some-file>: ambiguous merge - picked m action
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
以下是否会按预期工作?:
struct A {};
struct B: public A {
int x;
};
void f( B* o ) {
std::cout << o->x << std::endl;
}
int main () {
B b;
b.x = 5;
reinterpret_cast<void(*)(A*)>(f)( &b );
}
Run Code Online (Sandbox Code Playgroud) 我想将非虚方法添加到A我无法更改的现有类中.因此,我创建了一个B继承自的类,A并添加了我想要的方法.现在,如果我有一个类型的对象A,我可以将它视为类型的对象B吗?说,以下代码合法吗?:
class A { <...> };
class B: public A {
void f();
};
A a();
void g( const B& );
void h() { g( static_cast<B&&>(a()) ); }
Run Code Online (Sandbox Code Playgroud)
它确实编译和工作,但我想知道标准是否能保证按预期工作.我不明白为什么不,但感觉不是很干净..