阅读C++ 11草案我对第1.7.3节感兴趣:
存储器位置是标量类型的对象或相邻位域的最大序列,所有这些都具有非零宽度.......两个执行线程(1.10)可以更新和访问单独的存储器位置,而不会相互干扰.
本条款是否可以防止硬件相关的竞争条件,例如:
我有一个带编码alpha通道的PNG,我希望将其与原始ARGB图像混合在存储器中进行交错存储.PNG具有与图像缓冲器不同的分辨率,并且需要相应地调整大小(优选地使用插值).
虽然我很欣赏它并不是特别难以手工完成(一旦将PNG图像加载到适当的结构中),我希望找到一个好的开源图像处理库来为我完成这项工作.
我看了几个包括:
但似乎没有一个能够处理加载PNG,调整PNG图像大小,将alpha混合到图像数据和处理ARGB格式(与RGBA相反)的所有要求.
性能是一个问题,因此减少对图像数据的传递将是有益的,尤其是能够将ARGB数据保持在适当的位置而不是必须将其复制到不同的数据结构以执行混合.
有没有人知道任何可以提供帮助的图书馆,或者我是否错过了上述某项内容?
我正在使用Make,我有一个makefile,它设置一个变量,其值需要从父makefile中覆盖.我已经尝试在父makefile中设置变量并使用export
它将其传递给子制表但变量不使用传递的值,而是使用在子Makefile中显式设置的值.
我知道在命令行上指定的变量会覆盖makefile中的任何普通赋值(除非override
被使用),但是有一种方法可以为子制作实现这一点,而不必在每次调用子制作时在命令行上指定它(因为有不少,我喜欢留DRY)?
UPDATE
我应该提到我不能修改submake文件,因为它来自我们跟踪的外部存储库,我没有权限修改它所以我需要在父makefile级别工作以影响submake.
例
这是调用子制作的父makefile中的代表目标:
$.PHONY (external_lib)
$(external_lib):
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) make_a
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) make_b
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) make_c
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) make_d
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) make_e
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) make_f
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) make_g
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) make_h
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) make_i
$(MAKE) -C $(source_dir)/project/component $(PROJECTVARS) library
Run Code Online (Sandbox Code Playgroud) 在我看来,下面的代码(来自一些C++问题)应该导致UB,但它似乎不是.这是代码:
#include <iostream>
using namespace std;
class some{ public: ~some() { cout<<"some's destructor"<<endl; } };
int main() { some s; s.~some(); }
Run Code Online (Sandbox Code Playgroud)
答案是:
some's destructor
some's destructor
Run Code Online (Sandbox Code Playgroud)
我学习了c ++ faq lite,我们不应该显式调用析构函数.我认为在显式调用析构函数后,应该删除对象s.程序完成后会自动再次调用析构函数,它应该是UB.但是,我在g ++上尝试了它,并获得与上述答案相同的结果.
是因为这个类太简单了(不涉及新的/删除)?或者在这种情况下它根本不是UB?