将零整数转换为零浮点数

时间:2016-09-17 23:13:47

标签: c++ ios objective-c llvm-clang

几个月来,我有一个使用这个基本结构的项目:

  struct screenPoint {
    float x = 0, y = 0;
    screenPoint(float x_, float y_): x{x_}, y{y_}{}
  };

一切都很好,然后升级到Xcode 8,可能会有点不同地编译C ++。经过几个小时的调试,我发现我使用的代码如下所示:

screenPoint offset{0,0}; //undefined behavior?

不再保证成员会为0.通常他们中的一个或两个大约是2E20。我最后解决了这个问题:

  screenPoint offset{0.0f,0.0f}; //works, the members are zeroed out

C ++中是否有变化,不再像我期待的那样将整数转换为浮点数?

尝试在Mac上重现这个或在Xcode中的iOS模拟器上,我不能。但是,在4岁的iPad上运行的以下基本测试显示,{0,0}的情况不会使浮点数在随机情况下等于零:

struct screenPoint {
    float x = 0, y = 0;
    screenPoint(float x_, float y_): x{x_}, y{y_}{}
};

class foo{
public:
    foo(int x){}
private:
    screenPoint s{0,0};
};


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    while (1) {
        foo f(1); //see comment below
    } nib.
}

在行foo f(1)上放置一个断点表明,成员s的值并非总是0,而x和y的值为0。

为了方便本例,我将C ++结合到Objective C文件中,但在我的代码中,它是一个单独的C ++静态库。

0 个答案:

没有答案