相关疑难解决方法(0)

Constexpr数学函数

从这个页面中可以看出,c ++ 11中的数学函数似乎都没有使用constexpr,而我相信所有这些函数都可以.所以这给我留下两个问题,一个是他们为什么选择不使函数constexpr.对于像sqrt我这样的函数来说,两个人可能会编写我自己的constexpr,但是像sin或cos这样的东西会比较棘手,所以它就在那里.

c++ cmath constexpr c++11

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

如何在C++ 11 constexpr中检查double的位模式是0x0?

我想检查给定的double/float变量是否具有实际的位模式0x0.不要问为什么,它在qIsNull()我想成为的Qt()函数中使用constexpr.

原始代码使用了一个联合:

union { double d; int64_t i; } u;
u.d = d;
return u.i == 0;
Run Code Online (Sandbox Code Playgroud)

constexpr当然不起作用.

接下来的尝试是reinterpret_cast:

return *reinterpret_cast<int64_t*>(&d) == 0;
Run Code Online (Sandbox Code Playgroud)

但是虽然它constexpr在GCC 4.7 中起作用,但它在Clang 3.1中失败(正确地,指针操作的b/c).

最后的想法是去Alexandrescuesque并做到这一点:

template <typename T1, typename T2>
union Converter {
    T1 t1;
    T2 t2;
    explicit constexpr Converter( T1 t1 ) : t1(t1) {}
    constexpr operator T2() const { return t2; }
};

// in qIsNull():
return Converter<double,int64_t>(d);
Run Code Online (Sandbox Code Playgroud)

但对于Clang来说,这也不够聪明:

note: read of member 't2' of …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point casting constexpr c++11

9
推荐指数
2
解决办法
972
查看次数

为什么我们将INT_MIN定义为-INT_MAX - 1?

AFAIK这是一个标准的"习语"

#  define INT_MIN   (-INT_MAX - 1)  
#  define INT_MAX   2147483647    
Run Code Online (Sandbox Code Playgroud)

问题:为什么INT_MIN的定义不是-2147483648?

c signed types integer

4
推荐指数
1
解决办法
2122
查看次数

标签 统计

c++ ×2

c++11 ×2

constexpr ×2

c ×1

casting ×1

cmath ×1

floating-point ×1

integer ×1

signed ×1

types ×1