草庐IT

int_void

全部标签

c++ - int8_t 和 char : converts between pointers to integer types with different sign - but it doesn't

我正在处理一些嵌入式代码,并且正在从头开始编写一些新东西,因此我更愿意坚持使用uint8_t、int8_t等类型。然而,当移植一个函数时:voidfunctionName(char*data)到:voidfunctionName(int8_t*data)在将文字字符串传递给函数时,我收到编译器警告“在指向具有不同符号的整数类型的指针之间转换”。(即调用functionName("putthistextin");时)。现在,我明白了为什么会发生这种情况,并且这些行只是调试,但我想知道人们认为什么是最合适的处理方式,而不是对每个文字字符串进行类型转换。在实践中,我不认为一揽子类型转换比使用

c++ - int to void* - 避免 c 风格的转换?

我需要将int(指定字节偏移量)转换为constvoid*。唯一真正适合我的解决方案是C风格的转换:intoffset=6*sizeof(GLfloat);glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,0,(void*)offset);我想摆脱c风格的强制转换,但找不到可行的解决方案。我试过了static_cast(&offset)它可以编译,但这不是正确的解决方案(这种方法的整个输出不同)。什么是正确的解决方案?glVertexAttribPointer文档链接:Link 最佳答案 考虑到

c++ - 为什么 (void)sizeof(param) 不是 "using"参数?

我有一个定义如下的宏:#defineUNREF_PARAM_1(a)do{\(void)sizeof(a);\}\while(0)去除编译器警告。在我正在处理的一个新项目中,VS2013突然再次提示未引用的形式参数。奇怪的是,如果我只使用(void)param,它确实有效。有没有人知道为什么它在与(void)sizeof(param)一起使用时不起作用? 最佳答案 因为在sizeof(param)中,param是所谓的未计算的操作数,因此未被odr使用-也就是说,不是在运行时需要。但是,(void)param确实构成了odr-use

C++ --- 错误 C2664 : 'int scanf(const char *,...)' : cannot convert argument 1 from 'int' to 'const char *'

我是C++的新手,我正在尝试构建这个非常简单的代码,但我不明白为什么会出现此错误:Error1errorC2664:'intscanf(constchar*,...)':cannotconvertargument1from'int'to'constchar*'代码如下://lab.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#includeintmain(intargc,char*argv[]){introw=0;printf("Pleaseenterthenumberofrows:");sc

c++ - std::vector<int, std::allocator<char>> 有效吗?

标准没有说明std::vector的分配器但只需要分配器满足Allocator概念。没有关于分配器的value_type,没有reference_type,什么都没有。我以为std::vector内部重新绑定(bind)A到T的分配器,所以我给了一个vectorstd::allocator它按预期工作。但是,如果std::allocator,GCC会生成错误给出,如下:/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/ext/alloc_traits.h:Ininstantiationof‘struct__gnu_cxx::__

c++ - static_casting a constexpr void* 的结果是常量表达式吗?

clang正在拒绝gcc允许的这段代码:intmain(){staticconstexprconstvoid*vp=nullptr;staticconstexprconstchar*cp=static_cast(vp);}具有以下内容:error:constexprvariable'cp'mustbeinitializedbyaconstantexpressionstaticconstexprconstchar*cp=static_cast(vp);阅读完N3797中的最终list后5.9/2我没有看到任何禁止在常量表达式中使用static_cast的内容。我是在看错地方还是误读了什么

c++ - 类型为 'int&' 的非常量引用的无效初始化,原因是什么?

我有给定的代码,但出现错误:error:invalidinitializationofnon-constreferenceoftype'int&'fromanrvalueoftype'int'constintb=f(a++);^intf(int&a){returna;}intmain(){//yourcodegoeshereinta=5;intb=f(a++);std::cout这个错误的原因是什么? 最佳答案 您不能将临时变量绑定(bind)到非常量引用。后递增(a++)递增a并返回一个带有a旧值的临时值。为什么要传递非const

c++ - 将 long int* 转换为 long long int*

在我的平台上,longint和longlongint是相同的(64位)。我有一个指向longint的指针,我想将它转换为指向longlongint的指针。以下代码static_cast(pointer);是不允许的。在C++11中执行此操作的正确方法是什么? 最佳答案 你必须强制“重新解释”指针:reinterpret_cast(pointer);这样的转换意味着编译器“停止检查,我知道如何更好地解释该表达式中的二进制数据”。因此,无论何时制作reinterpret_cast-检查您对平台、内存对齐等的了解。编写一些简单的单元测试等

c++ - 提升精神 x3 int32 | double_ 无法解析 double

我正在尝试编写一个解析器,它解析int32_t或double.作为第一次尝试,我编写了这个解析器:constautoint_or_double=boost::spirit::x3::int32|boost::spirit::x3::double_;我希望得到一个boost::variant解析器成功解析了类似12,100,-42,7的整数但它无法解析像13.243,42.7,12.0-10000.3这样的double这是一个直播demo为什么这个解析器在double上失败? 最佳答案 您的问题与thisquestion非常相似.当整

c++ - 在具有一个元素的列表上强制 std::vector 重载而不是 int 重载

考虑下面的代码:#include#includevoidf(std::vectorv){std::coutLiveonColiru我有点惊讶地发现在这种情况下正在拾取int重载,即程序的输出是:voidf(int)警告warning:bracesaroundscalarinitializer[-Wbraced-scalar-init]f({42});当然,只有当我将1元素列表作为参数传递时才会发生这种情况,否则std::vector正在拾取过载。为什么是{42}被视为标量而不是初始化列表?有没有办法强制编译器选择std::vector即使在1元素列表上也会重载(没有明确构造std::v