浮点值除法有_mm_div_ps,整数乘法有_mm_mullo_epi16.但是有什么整数除法(16位值)?我怎么进行这种划分?
求职面试的问题
int count = 0;
void func1()
{
for ( int i =0 ; i < 10; ++i )
count = count + 1;
}
void func2()
{
for ( int i =0 ; i < 10; ++i )
count++;
}
void func3()
{
for ( int i =0 ; i < 10; ++i )
++count;
}
int main()
{
thread(func1);
thread(func2);
thread(func3);
//joining all the threads
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是:count理论上可能采用的价值范围是多少?上限显然是30,但是较低的是什么?他们告诉我它10,但我不确定.否则,为什么我们需要记忆障碍?
那么,范围的下限是多少?
template<int N>
struct S
{
void foo()
{
sizeof( S ); // (*)
sizeof( S<N> );
}
};
int main()
{
S<5> s;
s.foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码编译得很好(VS2010),但我对(*)字符串有疑问.S是不完整的类型,不像S<N>在我看来那么编译器怎么知道它的大小?标准对这种情况说了什么,它是否形成良好sizeof?
这是一个代码:
#include <functional>
using namespace std::tr1;
typedef void(*fp)(void);
void foo(void)
{
}
void f(fp)
{
}
int main()
{
function<void(void)> fun = foo;
f(fun); // error
f(foo); // ok
}
Run Code Online (Sandbox Code Playgroud)
最初我需要从非静态类方法创建一个函数指针,因为我需要在函数调用之间保存数据.我试过std::tr1::bind和boost::bind,但他们返回功能对象,不是指针,正如我所看到的,不能被"铸造"纯功能性的指针.虽然函数signature(SetupIterateCabinet)需要一个纯粹的func指针.
我需要建议如何解决问题.谢谢.
我怎样才能进行std::find的传统阵列上没有作出新的std::vector/ std::array从现有的传统阵列?
例如:
int ar[N];
if ( std::find(ar, ar + N, value) != &ar[N] ){ /**/ }
Run Code Online (Sandbox Code Playgroud)
&ar[N]没有找到任何内容时检查情况是否有效?我可以肯定我正确使用&ar[N]像模拟一样std::vector::end()吗?
struct A{};
struct B : A{};
int main()
{
A a;
A& a_ref = a;
static_cast<B>(a); // *1
static_cast<B&>(a_ref); // *2
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(*1)产生错误,我理解为什么.(*2)编译好,但为什么?并且,只要它编译并假设B包含一些属性,如果我a_ref转换B&然后尝试访问属性怎么办?我想我会遇到运行时错误.
所以,正如我所看到的,有一种情况会导致崩溃并且没有办法避免崩溃,这与dynamic_cast人们可以检查转换为null的结果或将代码放在某个try-catch区域中的情况不同.我如何处理这种情况,我需要投射参考,并确保我真正得到正确的参考.
例如,有一个功能做某事.我应该如何在函数内声明和定义一个数组,我只想分配/初始化一次?
void someclass::somefunction(/*parameters here*/)
{
static const my_array[4] = {1,2,3,4}; // #1
/*or just*/
const my_array[4] = {1,2,3,4}; // #2
}
Run Code Online (Sandbox Code Playgroud)
据我所知,#1"my_array"将在数据段中分配,并在第一次"somefunction"调用时初始化一次.但是我的一位同事假设案例#2以相同的方式工作,并且不需要编写"静态"关键字.
所以我想问一下,标准是关于案例#1和#2的说法,如果确实如此,究竟是什么?我该如何定义这种类型的数组,以确保它只被分配/初始化一次?
谢谢.
我正在研究一些图形应用程序,我得到了一个GL_INVALID_OPERATION后glPopAttrib().预测答案"看起来你glPopAttrib()在glBegin/glEnd街区内打电话"请看我用GLIntercept做的这个日志.
/* tons of wglGetProcAddress* */
wglGetProcAddress("glEndOcclusionQueryNV")=087C9B10
wglGetProcAddress("glBeginTransformFeedbackN...")=087C9ED0
wglGetProcAddress("glEndTransformFeedbackNV")=087C9F00
glPushAttrib(GL_VIEWPORT_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPopAttrib()
glPopAttrib() glGetError() = GL_INVALID_OPERATION # <---- THIS
glPopAttrib()
glPushAttrib(GL_VIEWPORT_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPopAttrib()
glPushAttrib(GL_POINT_BIT | GL_LINE_BIT | GL_COLOR_BUFFER_BIT)
glPopAttrib()
glPopAttrib()
glPopAttrib()
glPushAttrib(GL_VIEWPORT_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPopAttrib()
glPopAttrib()
glPopAttrib()
/* and so on */
Run Code Online (Sandbox Code Playgroud)
glBegin/glEnd在导致错误之前不会进行任何调用glPopAttrib().(我使用findstr commad来过滤日志).
该错误仅出现一次,在代码执行期间不再出现此类(或其他)错误.我有一种怀疑,我应该先调用一些函数glPushAttrib(GL_VIEWPORT_BIT)或之前的东西.
import sys
s1 = input()
s2 = sys.stdin.read(1)
#type "s" for example
s1 == "s" #False
s2 == "s" #True
Run Code Online (Sandbox Code Playgroud)
为什么?我怎样才能input()正常工作?我试图编码/解码s1,但它不起作用.
谢谢.
为什么我不能
if (IUnknownPtr p = anotherComPtr) {} //error C2275: 'IUnknownPtr' : illegal use of this type as an expression
Run Code Online (Sandbox Code Playgroud)
虽然我可以
if (int* a = anotherPointer) {}
Run Code Online (Sandbox Code Playgroud)
IUnknownPtr是通过定义_COM_SMARTPTR_TYPEDEF(IUnknown, __uuidof(IUnknown))(像我使用的任何其他智能指针)
如何在if语句中创建com smartptr 并验证它是否有效?谢谢.
我使用VS 2008
ps这不是关于编码的好方法,而是关于error C2275.
c++ ×9
arrays ×1
bind ×1
com ×1
concurrency ×1
const ×1
functor ×1
input ×1
opengl ×1
python ×1
python-3.2 ×1
python-3.x ×1
sizeof ×1
sse ×1
static ×1
static-cast ×1
stl ×1
templates ×1
windows ×1