在C ++ std :: vector construcor中使用hex 0xdeadbeef

时间:2015-10-14 12:37:18

标签: c++ vector constructor

我正在阅读一些使用C ++包装器的OpenCL教程,其中一个示例代码使用以下内容来定义一些向量

std::vector<float> h_a(LENGTH);
std::vector<float> h_b(LENGTH);
std::vector<float> h_c(LENGTH, 0xdeadbeef);

对于第三个定义,它们包括十六进制0xdeadbeef。第三个向量用于存储内核在OpenCL程序中返回的输出,它仍然未初始化。

在我看来,是一个指定的内存地址,但是我从这里看不到允许在std库描述中使用它的构造函数:http://en.cppreference.com/w/cpp/container/vector/vector 除非它与分配器类型有关。

我想问一下这个特定向量的内存地址是否很简单,如果对0xdeadbeef的选择有一定的意义(关于幻数的维基文章说它很容易在内存转储中找到)这符合我们有一个未初始化的向量的情况,它用于向量初始化的特定构造函数,如果可能的话,以这种方式定义向量的动机是什么。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

它没有指定内存地址,它只是以十六进制表示法指定一个整数常量。然后将此常量隐式转换为float,以调用vector的构造函数的版本,该构造函数获取元素的长度和初始值。 (注意浮点数是浮点值最接近0xdeadbeef(十进制为3735928559)的值,而不是与0xdeadbeef具有相同位模式的浮点数。)

答案 1 :(得分:0)

         vector( size_type count,

             const T& value,
             const Allocator& alloc = Allocator());

初始化向量的内容

答案 2 :(得分:0)

关键是在查看调试输出时,deadbeef这个词会跳出来。它通常用于表示尚未初始化的值。如果您在调试输出中看到它,那么您有未初始化数据的可能性非常高。

但是,在这种情况下,该值用于初始化浮点值数组。一旦价值转换为浮动,那么它就不会脱颖而出。实际上在这种情况下,它被转换为最接近0xdeadbeef的浮点数,其十进制值为3735928559,最接近浮点数为37359285576.0f。去图!

也许编写此代码的人习惯于将所有内容初始化为0xdeadbeef,而不是将此数据调整为浮点数。