草庐IT

int_expr

全部标签

c++ - "no ' operator++(int) ' declared for postfix '++ ' [-fpermissive]"枚举

这个问题在这里已经有了答案:HowcanIiterateoveranenum?(28个答案)Whycan'tIincrementavariableofanenumeratedtype?(10个答案)关闭9年前。我有枚举enumProgramID{A=0,B=1,C=2,MIN_PROGRAM_ID=A,MAX_PROGRAM_ID=C,}CurrentProgram;现在,我正尝试像这样递增CurrentProgram:CurrentProgram++,但编译器提示:没有为后缀'+声明'operator++(int)'+'[-fpermissive]。我认为有这样一个运算符可以增加“枚

c++ - 'unused' 的初始化被 'goto label' 跳过 - 为什么我为 std::string 而不是为 int 获取它?

我在某些代码中遇到了这个错误,经过一些试验后我偶然发现了这个怪异之处——我为std::string得到了它,但没有为int得到它。对于std::string我得到errorC2362:initializationof'unused'isskippedby'gotolabel':{gotolabel;std::stringunused;label:;}对于int我没有收到任何错误,但是:{gotolabel;intunused=10;label:;}为什么不同?是因为std::string有一个非平凡的析构函数吗? 最佳答案 这包含在

c++ - pair<int, int> vector 的哈希函数

我正在尝试为vector>实现一个unordered_map。自there'snosuchdefaulthashfunction,我试着想象一个我自己的功能:structObjectHasher{std::size_toperator()(constObject&k)const{std::stringh_string("");for(autoi=k.vec.begin();i!=k.vec.end();++i){h_string.push_back(97+i->first);h_string.push_back(47);//'-'h_string.push_back(97+i->sec

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++ --- 错误 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++ - 成员函数中的 decltype(auto) 忽略无效主体,decltype(expr) 失败

我有一个简单的模板化包装器结构,其成员函数在其模板类型的对象上调用.error()。templatestructWrapper{Tt;decltype(auto)f(){returnt.error();//calls.error()}};如果我用一个没有error()成员函数的类型实例化它,只要我不调用它就没问题。这就是我想要的行为。Wrapperw;//noproblemhere//w.error();//uncommentedcausescompilationfailure如果我使用我认为是具有尾随返回类型的语义等价物,它会在变量声明上出错templatestructWrapper

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-检查您对平台、内存对齐等的了解。编写一些简单的单元测试等