我很难搞清楚这个错误.我承认,我是c ++的新手,我的困难来自于不理解错误信息.
这是代码:
auto selectionFuncs[8] =
{
[&](const Vector3& min, const Vector3& max)
{
return max.x_ == seamValues.x_ || max.y_ == seamValues.y_ || max.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_ && min.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.y_ == seamValues.y_;
},
[&](const …Run Code Online (Sandbox Code Playgroud) 所以,我仍在学习按位运算,无法弄清楚为什么会发生此错误。我在谷歌上搜索过它,看起来这个错误可能是在弄乱堆栈时发生,或者在某些情况下,它与 CPU 架构有关。我试过用不同的标志进行编译,这些标志应该有帮助,但我无法让它工作。
这是快速的代码:
int corners = 0;
for (int i = 0; i < 8; i++)
{
const ivec3 cornerPos = leaf->min + CHILD_MIN_OFFSETS[i];
const float density = Density_Func(vec3(cornerPos));
const int material = density < 0.f ? MATERIAL_SOLID : MATERIAL_AIR;
corners |= (material << i);
}
Run Code Online (Sandbox Code Playgroud)
并且错误“非法指令(核心转储)”发生在该行
corners |= (material << i);
这是调试器的输出:
Signal received: SIGILL (Illegal instruction) For program, pid 26,118
Run Code Online (Sandbox Code Playgroud)
我将给出这个循环的输出(它永远不会超过第一个循环)。这是 couts 的代码:
int corners = 0;
std::cout<<"corners(outside loop): "<<corners<<std::endl;
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 我无法通过Google找到任何相关信息,因此我必须在此处提问.我想做这样的事情(非常伪代码):
y = first_value
x={op_1 = >, op_2 = <, c = some_value}
if first_value x.op_1 x.c then
...
end
Run Code Online (Sandbox Code Playgroud)
该代码对我说的是,如果first_value大于x的c值,那么就做一些事情.现在,我知道我可以将op_1和op_2设置为某个值来区分它们,然后使用单独的if语句比较值,但我想最小化if语句的使用数量.
我只是想知道这样的事情是否可能,甚至可能是以不同的形式.提前致谢!
c++ ×2
c++14 ×2
arrays ×1
bit-shift ×1
bitwise-or ×1
if-statement ×1
lambda ×1
lua ×1
operators ×1