我知道整数值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
吗?
我知道:
#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"
.
为什么?该过程涉及哪些步骤?
我们知道这T v(x);
被称为直接初始化,而T v = x;
被称为复制初始化,这意味着它将构造一个临时T
的x
,将被复制/移入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) 我需要一些关于这个布尔含义的帮助.
有人可以用简单的术语解释这是如何工作的:
A
暗示B = B + A'
(如果A然后B).也相当于A >= B
我有一个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)
我宁愿不必将元素复制到新的数据结构.
我正在阅读这份文件: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变量.
我知道如何使用牛顿拉夫森计算函数的零点,我知道如何使用它来计算一个数的平方根,但我看不出这些代码如何执行它.
有人可以向我解释一下吗?
我正在写一个实现开放式VG和OpenGL的| 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标记.应该有吗?
关于main()
[3.6.1] ,我能够找到的C++ 14的最后一个草案说:
实现不应预定义主函数.此功能不应过载.它应该具有int类型的返回类型,否则其类型是实现定义的.所有实现都应允许两者
- 返回int和的函数()
- 返回int的函数(int,指向char的指针)
及(第5段)
如果控制到达main的末尾而没有遇到return语句,则效果就是执行
return 0;
这是否意味着以下所有内容都是合法的C++ 14最小程序?如果没有,为什么不呢?
auto main() -> int {}
auto main() { return 0; }
auto main() {}
我知道在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) 我遇到了在不支持SSE4.1的系统上运行我的旧代码的崩溃,我调试了一下并在glibc中找到了SSE指令,这可能吗?为什么不在gcc 4.8.1发布说明中报告这个?