小编Mar*_* A.的帖子

是否有可能区分0和-0?

我知道整数值0-0基本相同.但是,我想知道是否有可能区分它们.

例如,我如何知道是否分配了变量-0

bool IsNegative(int num)
{
    // How ?
}

int num = -0;
int additinon = 5;

num += (IsNegative(num)) ? -addition : addition;
Run Code Online (Sandbox Code Playgroud)

-0保存在内存中的值与完全相同0吗?

c++ int zero negative-number

92
推荐指数
6
解决办法
7397
查看次数

字符串化 - 它是如何工作的?

我知道:

#define foo 4  
#define str(s) #s
Run Code Online (Sandbox Code Playgroud)

str(foo)写出:"foo"因为字符串化的第一个文本扩展的执行,但这样的:

 #define xstr(s) str(s)
 #define str(s) #s
 #define foo 4
Run Code Online (Sandbox Code Playgroud)

xstr(foo)写出:"4".

为什么?该过程涉及哪些步骤?

c c++ stringification c-preprocessor

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

为什么标准区分直接列表初始化和复制列表初始化?

我们知道这T v(x);被称为直接初始化,而T v = x;被称为复制初始化,这意味着它将构造一个临时Tx,将被复制/移入v(很可能被省略).

对于列表初始化,标准根据上下文区分两种形式.T v{x};称为直接列表初始化,T v = {x};称为复制列表初始化:

§8.5.4 [dcl.init.list] p1

[...]列表初始化可以在直接初始化或复制初始化上下文中进行; 直接初始化上下文中的列表初始化称为直接列表初始化,复制初始化上下文中的列表初始化称为复制列表初始化.[...]

但是,整个标准中只有两个引用.对于直接列表初始化,在创建像T{x}(§5.2.3/3)这样的临时表时会提到它.对于copy-list-initialization,它用于返回语句中的表达式,如return {x};(§6.6.3/2).

现在,下面的片段怎么样?

#include <initializer_list>

struct X{
  X(X const&) = delete; // no copy
  X(X&&) = delete; // no move
  X(std::initializer_list<int>){} // only list-init from 'int's
}; …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++11 list-initialization

37
推荐指数
1
解决办法
2782
查看次数

布尔意义

我需要一些关于这个布尔含义的帮助.

有人可以用简单的术语解释这是如何工作的:

A暗示B = B + A'(如果A然后B).也相当于A >= B

boolean-logic

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

切矢量

我有一个std :: vector.我想创建表示该向量切片的迭代器.我该怎么做?在伪C++中:

class InterestingType;

void doSomething(slice& s) {
    for (slice::iterator i = s.begin(); i != s.end(); ++i) {
       std::cout << *i << endl;
    }
}
int main() {
   std::vector v();
   for (int i= 0; i < 10; ++i) { v.push_back(i); }
   slice slice1 = slice(v, 1, 5);
   slice slice2 = slice(v, 2, 4);
   doSomething(slice1);
   doSomething(slice2);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我宁愿不必将元素复制到新的数据结构.

c++ stl

30
推荐指数
3
解决办法
5万
查看次数

Newton Raphson与SSE2 - 有人可以解释我这3行

我正在阅读这份文件:http://software.intel.com/en-us/articles/interactive-ray-tracing

我偶然发现了这三行代码:

SIMD版本已经快了很多,但我们可以做得更好.英特尔为SSE2指令集添加了快速1/sqrt(x)函数.唯一的缺点是它的精度有限.我们需要精度,所以我们使用Newton-Rhapson来改进它:

 __m128 nr = _mm_rsqrt_ps( x ); 
 __m128 muls = _mm_mul_ps( _mm_mul_ps( x, nr ), nr ); 
 result = _mm_mul_ps( _mm_mul_ps( half, nr ), _mm_sub_ps( three, muls ) ); 
Run Code Online (Sandbox Code Playgroud)

此代码假定存在名为"half"(四次0.5f)和变量"three"(四次3.0f)的__m128变量.

我知道如何使用牛顿拉夫森计算函数的零点,我知道如何使用它来计算一个数的平方根,但我看不出这些代码如何执行它.

有人可以向我解释一下吗?

c c++ math sse newtons-method

28
推荐指数
1
解决办法
2648
查看次数

EGL和OpenGL之间有什么关系?

我正在写一个实现开放式VGOpenGL的| ES,这两者取决于Khronos的EGL API,据说是为了便于携带,我猜.

出于乐趣和教育原因,我正在OpenGL ES上编写一个OpenVG实现 - 我没有做过很多渲染工作,我想了解更多有关开放API和实践明确标准的实践(更容易看看我是否得到了正确的结果).

据我了解,EGL提供了一个标准API,用于检索绘图上下文(或者它正确调用的内容),而不是使用多个OS提供的API之一(GLX,WGL等)

在此输入图像描述

我很难相信Khronos会经历这样的努力并将标准OpenGL从循环中移开但事实是,我还没有发现OpenGL(真正的交易)如何或者是否与EGL接口或者它是否只是OpenGL ES.如果OpenGL ES可以使用EGL的绘图上下文,标准OpenGL是否也可以使用?

我对这一切都很陌生,这就是为什么我很兴奋,但我正在做的真正项目是一个Go小部件工具包,它利用OpenVG进行绘图操作,并尽可能使用硬件加速.

如果OpenVG,OpenGL和OpenGL ES依赖于EGL,我认为我的问题可以用"是"或"否"来回答.请记住,我昨晚首先进入了这个主题.

OpenGL使用或依赖于EGL吗?


关闭主题,但没有EGL标记.应该有吗?

opengl opengl-es openvg egl

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

C++中main()的法律定义14

关于main()[3.6.1] ,我能够找到的C++ 14的最后一个草案说:

实现不应预定义主函数.此功能不应过载.它应该具有int类型的返回类型,否则其类型是实现定义的.所有实现都应允许两者

- 返回int和的函数()

- 返回int的函数(int,指向char的指针)

及(第5段)

如果控制到达main的末尾而没有遇到return语句,则效果就是执行

return 0;

这是否意味着以下所有内容都是合法的C++ 14最小程序?如果没有,为什么不呢?

  1. auto main() -> int {}
  2. auto main() { return 0; }
  3. auto main() {}

c++ program-entry-point language-lawyer c++14

22
推荐指数
1
解决办法
1586
查看次数

CMake表达了"更大或更平等"的陈述

我知道在CMake中我可以检查这样的编译器版本

if(MSVC_VERSION LESS 1700)
... // MSVC is lower than MSVC2012
Run Code Online (Sandbox Code Playgroud)

但是我如何用CMake语法表达这个呢?

if(MSVC_VERSION GREATER_OR_EQUAL_TO 1700)
... // MSVC greater or equal to MSVC2012
Run Code Online (Sandbox Code Playgroud)

cmake

18
推荐指数
2
解决办法
1万
查看次数

gcc 4.8.1默认启用sse吗?

我遇到了在不支持SSE4.1的系统上运行我的旧代码的崩溃,我调试了一下并在glibc中找到了SSE指令,这可能吗?为什么不在gcc 4.8.1发布说明中报告这个?

c c++ gcc gcc4.8

16
推荐指数
1
解决办法
6546
查看次数