小编Sku*_*del的帖子

Python整数除法产生浮点数

Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0
Run Code Online (Sandbox Code Playgroud)

这是有意的吗?我强烈记得早期版本的回归int/int=int?我应该怎么做,是否有新的分区运算符或者我必须总是演员?

python integer division python-3.x

211
推荐指数
4
解决办法
15万
查看次数

是否保证在块结束之前不会调用C++析构函数?

在下面的C++代码中,我保证在//更多代码执行调用~obj()析构函数?或者如果编译器检测到它没有被使用,是否允许编译器更早地销毁它?

{
  SomeObject obj;
  ... // More code
}
Run Code Online (Sandbox Code Playgroud)

我想使用这种技术来节省我必须记住在块的末尾重置一个标志,但我需要为整个块保持设置的标志.

c++ raii

34
推荐指数
5
解决办法
7337
查看次数

C#:使用匿名函数排序

假设我有一个对象列表,我想按项目DateModified属性对其进行排序.为什么我不能像这样使用委托?如果不是如下所示,我应该如何按DateModified对它们进行排序:

public string SortByDateModified(List<CartItem> items)
{
    items.Sort(new Func<CartItem, CartItem, bool>((itemA, itemB) =>
    {
        return itemA.DateModified < itemB.DateModified;
    }));
}
Run Code Online (Sandbox Code Playgroud)

c# sorting

24
推荐指数
3
解决办法
2万
查看次数

C99中的易失性语义

我有一些低级代码我写,我需要使用对象为挥发性的问题,但它不一定是这样,我想声明的类型为挥发性(可重用的原因).但是,我可以定义指向结构的限定变体的指针,如以下段中所述.

struct x {
  int bar;
};

struct x foobar;
...
volatile struct x *foo = &foobar;
Run Code Online (Sandbox Code Playgroud)

现在foo实际上是指向该类型对象的指针:

volatile struct x {
  volatile int x;
};
Run Code Online (Sandbox Code Playgroud)

因为volatile适用于所有struct成员.现在我的问题是当一个对象包含指向另一个对象的指针时,如何应用波动性?

struct x {
  struct y *bar;
};
Run Code Online (Sandbox Code Playgroud)

指向x的volatile实例的指针然后将其视为:

volatile struct x {
  struct y * volatile bar;
};
Run Code Online (Sandbox Code Playgroud)

或作为:

volatile struct x {
  volatile struct y * volatile bar;
};
Run Code Online (Sandbox Code Playgroud)

我已经阅读了C标准,对此并不是很清楚,我可以通过多种方式轻松解释这些措辞.

c pointers volatile c99

12
推荐指数
1
解决办法
1753
查看次数

C++模板函数获取错误的默认值

我在C++中遇到了一个真正的大脑scorcher,它从来没有发生在我身上.

问题的关键在于,在调用my(模板)函数时,我定义的参数默认为其值加扰.只有在我使用默认值调用该函数时才会发生这种情况.

我的模板函数声明如下:

template <typename T>
vector2<T> transform(vector2<T> const &vec, matrix4<T> const &m, T z = T(0), T w = T(1));
Run Code Online (Sandbox Code Playgroud)

稍后,在相同的标题中,定义如下:

template <typename T>
inline vector2<T> transform(vector2<T> const &vec, matrix4<T> const &m, T z, T w)
{
 vector4<T> res = m * vector4<T>(vec.x, vec.y, z, w);
 return vector2<T>(res.x, res.y);
}
Run Code Online (Sandbox Code Playgroud)

现在当我用defaults(transform(vector2<double>(0, 1), view_transform))调用它时,我没有得到我期望的值.进入transformVC++的调试器我看到zw有"有趣"的值(根据我的经验意味着某些东西没有正确初始化).

示例有趣的值将是:0.0078125000000000000和2.104431116947e-317 #DEN

现在我尝试在C++ FAQ Lite上找到答案,谷歌搜索它; 甚至试图用舒伯特来平息自己,但我不能为我的生活弄清楚.我猜它真的很简单,我怀疑它是某种模板tomfoolery在工作.

有没有办法获得我期望和想要的默认值,为什么它对我这样做?

编辑1:

如果我改变调用所以它使用浮点数代替(transform(vector2<float>(0, 1), view_transform))问题消失了.看起来只有在T=时才会出现double.

编辑2: …

c++ templates default-value compiler-bug

10
推荐指数
1
解决办法
634
查看次数

const关键字如何在c中工作

我想知道c和c ++中的const内部.编译器如何强加常量?有谁可以帮助我吗.

c c++

9
推荐指数
3
解决办法
2684
查看次数

C中的外部和静态指针

嗨什么可能是静态和外部指针的用法?如果他们存在

c static pointers extern

7
推荐指数
3
解决办法
4万
查看次数

在设计内存池时如何考虑对齐?

我正在为一个小型游戏引擎开发内存池.

主要用途是作为隔离存储; 池包含特定类型和大小的对象.目前,池可用于存储任何内容,但分配将在特定大小的块中完成.大多数内存需求将立即分配,但如果需要协助调整(几乎固定大小),可以启用"过度增长".

问题是,在考虑内存对齐时,我开始有些偏执.我只习惯8位处理器上的原始内存管理,其中所有内容都是字节对齐的.

我让用户(我)指定所需的块大小,在隔离存储的情况下,它将是我将要存储在其中的对象的大小.

当前的方法是分配一大块内存blocks * (desired_size + header_size)并将对象放入其中,每个块都有一个标头; 对象显然会直接位于此标题后面.

在我的场景中,关于内存对齐,我需要考虑什么?

到目前为止我得出的答案是,只要desired_size表示n字节对齐的数据; 标题由编译器正确对齐和打包以及实际数据,存储在块中的所有内容都将是n字节对齐的.

n是平台所需的任何边界.我目前的目标是x86,但我不想在我的代码中对平台做任何假设.

我使用过的一些资源:

编辑

上传小样本代码,可能有帮助的任何人的困惑,我的未来在这里.

c++ memory

7
推荐指数
1
解决办法
1829
查看次数

正则表达式密码验证

我怎么能得到它所以它会检查字符串中的2位或更多位数?在String上调用匹配项.

s.matches("^[a-zA-Z0-9]{8,}$");
Run Code Online (Sandbox Code Playgroud)

java regex

7
推荐指数
2
解决办法
4398
查看次数

XNA查看矩阵 - 寻求解释

我在理解XNA中的视图矩阵时遇到了一些麻烦.我已经完成了所有其他部分,因为我刚刚学会了所需的数学,我不想使用内置的Matrix函数,而不了解他们先做的事情.

现在我理解了旋转,投影和翻译的基础知识,但我无法理解视图矩阵在XNA中的工作原理.

从我收集的信息来看,视图矩阵应该将"世界"转变为它自己的空间.看似合理,但库中的Matrix.CreateLookAt方法非常令人费解.

我已经建立(通过检查库函数输出的内容)这两段代码产生相同的结果:

Matrix view = Matrix.CreateReflection(new Plane(Vector3.UnitX, 0)) * Matrix.CreateReflection(new Plane(Vector3.UnitZ, 0)) * Matrix.CreateTranslation(Position);
// ..equals this if (Position = (0 0 -5), since LookAt "looks at" but the above just looks straight down Z)..
Matrix blah = Matrix.CreateLookAt(Position, Vector3.Zero, Vector3.UnitY);
Run Code Online (Sandbox Code Playgroud)

为什么要翻转X和Z轴?我认为你应该根据摄像机的旋转来旋转世界,但是在相反的方向,然后在相反的方向上将世界翻转相同的量.

或者视图矩阵根本不用作转换,而只是编码摄像机在世界中的位置和旋转?

c# 3d xna camera matrix

6
推荐指数
3
解决办法
1万
查看次数