草庐IT

pair_of_ints

全部标签

c++ - 有没有比添加 0.5f 和截断转换更直接的方法来将 float 转换为 int 并进行舍入?

在处理浮点数据的C++代码中,从float到int的舍入转换经常发生。例如,一种用途是生成转换表。考虑这个代码片段://ConvertapositivefloatvalueandroundtothenearestintegerintRoundedIntValue=(int)(FloatValue+0.5f);C/C++语言将(int)转换定义为截断,因此必须添加0.5f以确保向上舍入到最接近的正整数(当输入为正时)。对于以上,VS2015的编译器生成如下代码:movssxmm9,DWORDPTR__real@3f000000//0.5faddssxmm0,xmm9cvttss2siea

c++ - 为什么 uint8_t + uint8_t 会产生一个 int?

这个问题在这里已经有了答案:Additionoftwocharsproducesint(3个答案)关闭3年前。我注意到,对于8位变量的简单操作,变量在操作完成之前转换为32位int,然后再转换回8位变量。例如,这个C++程序:#include#includeintmain(void){uint8_ta=1;uint8_tb=2;std::cout产生以下输出:sizeof(a)=1sizeof(b)=1sizeof(a+b)=4所以我们可以理解发生的事情是:uint8_tc=(uint8_t)((int)(a)+(int)(b));显然,它似乎在this中所说的C规范中。论坛。此外,在

c++ - 统一初始化int* : how can it be forced?

以下代码无法使用clang++3.8.0和g++6.3.0进行编译(编译器标志为-std=c++11-Wall-Wextra-Werror-pedantic-errors):intmain(){int*a=int*{};//doesn'tcompile//^^^^can'tbeparsedasatype(void)a;usingPInt=int*;PIntb=PInt{};//compilessuccessfully//^^^^isparsedasatype(void)b;}这是一种强制编译器以正确方式解释int*{}的方法吗(typedefingofint*是其中一种方式)?

c++ - switch 语句和对象隐式 int 转换

在C++中,直接在隐式转换为int的对象上使用switch语句是否合法/正确?而不是使用返回对象标记的方法。classAction{public:enumEType{action1,action2,action3};operatorint()const{returnmType;}private:ETypemType;/*...*/}intmain(){Actiona=/*...*/switch(a){caseAction::EType::action1:/*...*/break;caseAction::EType::action2:/*...*/}} 最佳答

c++ - MSVC : what compiler switches affect the size of structs?

我有两个单独编译的DLL,一个是从VisualStudio2008编译的,一个是从matlab编译的mex文件。两个DLL都包含一个头文件。当我在一个DLL中采用sizeof()结构时,它返回48,而在另一个DLL中它返回64。我检查了/Zp开关,在两个编译中它都设置为/Zp8。还有哪些其他编译器开关可能会影响结构的大小?该结构是一个简单的POCO,没有继承,也没有虚函数。编辑结构看起来像这样:classLIBSPECSGeometry{public:std::vectorm_i;uintN;uintn_im,n_s;};在调试中,sizeof()在两种情况下都返回56,在发行版中,在

c++ - 将 int 数组转换为 char*

这可能吗?我想将其转换为char*,以便稍后检索该值。 最佳答案 当然:intarray[4]={1,2,3,4};char*c=reinterpret_cast(array);有效范围是从c到c+sizeof(array)。您可以对任何POD类型执行此操作。您可以从字节序列中强制转换://assumingcaboveint(&pArray)[4]=*reinterpret_cast(c);这保证有效。但是,您似乎正试图通过网络发送内容,这可能会引入其他问题您正在寻找的过程称为序列化(并且有一个FAQentry)。这是当您获取一个对

c++ - 通过在 Fortran 中调用 C++ 函数将 Fortran int 数组传递给 C++

我正在尝试在Fortran子例程中调用C++函数。这个C++函数应该更新一个整数数组。这是我写的一个非工作代码。什么问题?!FortranfunctionthatcallsaC++function.subroutinemy_function()integer(4)ar(*)integer(4)get_filled_ar!Needcorrectsyntaxhere.ar=get_filled_ar()end//C++function:extern"C"{voidget_filled_ar(int*ar){ar[0]=1;ar[1]=10;ar[3]=100;}}

c++ - 转发声明/包含在模板类中 - "invalid use of incomplete type"

我正在尝试制作一个模板类,其中有一个函数接受该模板的特定实例。我做了以下人为的例子来说明这一点。比方说,我有一个标有模板化(通用)数据类型的个人世界。我有一个特定的个体,称为国王。所有个人都应该能够在国王面前下跪。一般来说,个人可以被标记为任何东西。国王用数字标记(第1、2位国王)。错误g++-g-O2-Wall-Wno-sign-compare-Iinclude-DHAVE_CONFIG_H-c-oIndividual.oIndividual.cppg++-g-O2-Wall-Wno-sign-compare-Iinclude-DHAVE_CONFIG_H-c-oKing.oKing

c++ - std::out_of_range 错误

我正在LinuxUbuntu的opencv中编写以下代码。x_captured和y_captured是“int”类型的vector。两个vector的大小都是18。for(inti=0;i但是当i=0和j=18之后它会抛出以下错误:terminatecalledafterthrowinganinstanceof'std::out_of_range'what():vector::_M_range_check 最佳答案 问题是当有效索引为0到N-1时,您正在使用从0到N的循环。这就是为什么您在最后一次迭代中遇到异常:std::vecto

c++ - 'more than one instance of overloaded function "sqrt“匹配参数列表”怎么办?

我的代码在for循环中出错,for(j=3;j:morethanoneinstanceofoverloadedfunction"sqrt"matchestheargumentlist.我该如何解决?#include//determineifnumberisprimeboolisPrime(longn){intj,num=0;{if(num 最佳答案 尝试:for(j=3;j(num));j+=2)发生的事情是包含3个不同的definitionsofsqrt并且编译器不知道您要使用哪个。