所以我有一个A类,我想调用一些B类函数.所以我加上"bh".但是,在B类中,我想调用一个A类函数.如果我包含"啊",它会以无限循环结束,对吧?我能做些什么呢?
我最近在应用程序中遇到了我认为是错误共享的问题,我查阅了Sutter关于如何将数据与缓存行对齐的文章.他建议使用以下C++代码:
// C++ (using C++0x alignment syntax)
template<typename T>
struct cache_line_storage {
[[ align(CACHE_LINE_SIZE) ]] T data;
char pad[ CACHE_LINE_SIZE > sizeof(T)
? CACHE_LINE_SIZE - sizeof(T)
: 1 ];
};
Run Code Online (Sandbox Code Playgroud)
我可以看到当这CACHE_LINE_SIZE > sizeof(T)
是真的时它会如何工作- 结构cache_line_storage
最终会占用一个完整的内存缓存行.但是,当sizeof(T)
大于单个缓存行时,我认为我们应该按CACHE_LINE_SIZE - T % CACHE_LINE_SIZE
字节填充数据,以便生成的结构的大小是缓存行大小的整数倍.我的理解有什么问题?为什么填充1个字节就足够了?
我想通过引用一个函数传递一个指针,这样我实际上可以改变传递指针所指向的地址,并且我想为这个参数赋一个默认值.
这样的事情:
在声明中
void myFunc(SomeType* &var=NULL);
Run Code Online (Sandbox Code Playgroud)
和定义:
void MyClass::myFunc(SomeType* &var){
if(var!=NULL)
(*var)=(*someOtherPointer);
if(someCondition)
var=NULL;
}
Run Code Online (Sandbox Code Playgroud)
这样被调用者可以决定是否要用一个参数或没有参数调用该函数.并且如果他决定传递一个参数,并且someCondition成立,则传递的指针将在之后指向NULL
然而 - 如果我尝试这样做我得到一个:
错误C2440:'默认参数':'int'无法转换为'SomeType*&'
谢谢您的帮助!
我在以下C代码中得到一个奇怪的结果.
int main()
{
int *p = (int *) malloc(100);
p[120] = 5;
printf("\n %d", p[120]);
}
Run Code Online (Sandbox Code Playgroud)
由于我只分配了100个字节,因此该代码应该导致分段错误.但是,它打印'5'并且不会给出任何运行时错误.有人可以解释原因吗?
我正在编写一个函数来处理传入的32位缓冲区,表示在与相应的存储32位缓冲区进行比较时更改数据.更改位的位置表示需要处理的数字(即,值8表示位3),以及更改是0-> 1还是1-> 0.这是目前的实施,请帮我改进一下!请注意,这不是实际代码,它已被简化为与上下文无关.
uint32_t temp = oldBuffer ^ newBuffer;
uint32_t number = 0;
while (temp != 0)
{
if (temp & 0x1)
{
uint32_t bitValue = 0;
if ((newBuffer& (1 << number)) != 0) bitValue = 1;
processNumber(number, bitValue);
}
number++;
temp = temp >> 1;
}
oldBuffer = newBuffer;
Run Code Online (Sandbox Code Playgroud)
现在它可以工作,但我不喜欢它必须检查每一位,检查位1并转移整个事情.如果有保证只有1位设置,这不会太难以弄清楚,但事实并非如此.
编辑:对于Neil,我想我希望找到一种方法来在恒定时间内获得XOR之后的位置,而不是一直移动缓冲区并逐个检查位.