草庐IT

c++ - 回调函数 : difference between void(*func)(int) and void(func)(int)

假设我有一个函数:voidfoo(inti){cout我将这个函数传递给:voidfunction1(void(callback)(int),intarg){callback(arg);}voidfunction2(void(*callback)(int),intarg){callback(arg);}这两个函数是一样的吗?两者有什么区别吗? 最佳答案 规则是,在函数的参数列表中,声明为具有函数类型的参数被调整为具有指向函数类型的指针(类似地,可能更广为人知的是,声明为类型为“数组T”调整为“指向T的指针”类型。允许在声明符中使用冗

c++ - 这是什么意思? : note: no known conversion for argument 1 from ‘int’ to ‘const account&’

我试图理解我们通常在C++程序中遇到的错误的含义。在编译程序时我遇到了一个错误(我故意犯了这个错误,请不要告诉我如何更正它)并且存在一个注释:note:noknownconversionforargument1from‘int’to‘constaccount&’我想看懂这张纸条的意思。我的程序是:#includeclassaccount{private:inta_no;public:account(){a_no=0;}voidshowData(){std::cout我知道我还没有定义一个可以接受一个参数的构造函数,这样做会消除我的错误。好的,编译时我得到了:file1.cpp:Infu

c++ - 避免采用 int 参数的模板类的 C++ 爆炸式实例化

假设我有一个C++类:templateclassText{public:Text(){}char_buf[N];};它只是封装了一个C字符串。现在,假设我编写了一个方法,它将获取另一个长度为M的Text对象,并将其内容复制到该对象中。templateclassText{public:Text(){}char_buf[N];templatevoidcopy(constText&t){strncpy(_buf,t.cstr(),N-1);_buf[N-1]='\0';}};这是否会导致重复的目标代码激增,唯一的区别是使用的常量N和M,特别是如果我使用此copy方法与具有许多不同的N和M的对

c++ - 对`i2c_smbus_read_word_data(int, unsigned char) 的 undefined reference

更新到Ubuntu18.04后,我无法编译我的Qt应用程序。出现以下错误:undefinedreferenceto`i2c_smbus_read_word_data(int,unsignedchar)据我了解,i2c_smbus_read_word_data现在不在linux/i2c-dev.h中定义,而是在动态库/usr/lib/x86_64-linux-gnu/libi2c.so中定义。我尝试动态链接:-li2c静态的:/usr/lib/x86_64-linux-gnu/libi2c.a但是还是有编译错误更新:已安装libi2c-dev、libi2c0和i2c-tools包。

c++ - 为什么我可以将一个大于 127 的 int 传递给一个 char 数组,而不是直接传递?

我知道char值不能表示为176,但一些字节系统是无符号的(0-255),而其他字节系统是有符号的(-128到127)。在这种情况下,我使用的是无符号的,所以我只想创建一个简单的字节消息数组,但是当我尝试放置一个高于127的值时出现此错误,但是如果我先将其声明为int,它会避免该错误.有人可以详细解释为什么这有效吗?方法1:不起作用。我收到此错误:缩小从“int”到“char”的“176”的转换charm1[3]{176,118,1};方法2:这个可行intb1=176;charm1[3]{b1,118,1}; 最佳答案 当使用大括

c++ - 与size_t比较,返回int?

我正在编写“如何像计算机科学家一样用C++思考”中的一些代码示例,而这个示例是关于处理扑克牌类型的对象和牌组的。我正面临这种情况:intCard::find(conststd::vector&deck)const{size_tdeckSize=deck.size();for(size_ti=0;i我不能像文中那样在VisualStudio2010中的C++中的vector上使用“.length()”,而是不得不使用.size(),它返回(我相信)std::size_type。我想我可以使用size_t并摆脱它以避免在不同体系结构上出现问题,正如我一直在阅读的那样,但我想知道我是否返回i

c++ - 当 vector<int> 长度增加时,如何设置断点?

我有一个空的vector,某处有东西填充它,但我找不到它。我想设置一个内存断点,这样当push_back发生时程序就会中断。我使用的是VisualStudio2008,问题是vector没有在监window口中显示其内部成员(它似乎具有自定义格式)。它看起来像这样:myVector[0]()std::vector>指示尺寸0。有什么提示吗? 最佳答案 此答案适用于VS2010-其他版本的细节可能有所不同。由于调试器使用数据可视化工具(或任何它的名字)来显示std::vector的状态,你必须查看header以确定类的实际成员的名称以

c++ - 模板 - 必要时使用 int、short 或 float 的类

我想编写一个类来管理欧几里德vector并使用短整型、整型、长整型或浮点型存储其初始点。我想创建一个这样的模板:templateclassEVector{private:unitx;unity;public:EVector();setX();setY();};因此,用户创建了一个选择合适原始类型的EVector。但是如何实现不同类之间的操作,例如EVectora;EVectorb;EVectorc;c=a+b;operator=将复制坐标,operator+添加它们。 最佳答案 此外,您可以使用我的promote实现:templat

c++ - 所以,我们有 int32_t、int16_t、uint64_t 等。但是 atoi32、atoi16、atoui64 等在哪里……?

我想将表示数字的字符串输入转换为相应的数字类型。问题是我有严格的类型要求,例如,我不能接受x>=2^15其中int16_t预期值(有符号)。如果不从头编写所有转换函数,我该如何处理这种情况?附言请不要建议boost::lexical_cast-我已经在使用它了。我正在谈论的功能将取代lexical_cast的默认实现通过特定模板特化的模板,即:templateinlineint32_tlexical_cast(constchar*const&arg){}templateinlineint16_tlexical_cast(constchar*const&arg){}...理想情况下,最好

c++ - 使用非固定整数(int、long)而不是固定大小的整数(int64_t、int32_t)有什么好处吗?

也许是性能?我觉得使用非固定整数只会让程序更复杂,并且在移植到另一个架构时更容易失败。 最佳答案 std::intN_t提供onlyiftheimplementationcandirectlysupportthem.因此,使用它们的移植代码可能会失败。我更喜欢std::intfastN_t用于一般用途,因为它们的限制较少,应该和int一样快或更快.此外,大多数C++代码使用int无处不在,所以你可能会在通过std::int32_t时遇到晋升怪事进入接受int的函数,特别是如果sizeof(int)只有16位。