草庐IT

int_void

全部标签

c++ - 在 C++ 中将指针变量分配给 const int?

我想知道是否有人可以向我解释以下内容:如果我写inti=0;float*pf=i;我得到一个编译错误(gcc4.2.1):error:invalidconversionfrom‘int’to‘float*’有道理——它们显然是两种完全不同的类型。但是如果我写constinti=0;float*pf=i;它编译没有错误。为什么“const”应该在赋值的右侧有所不同?“const”关键字的想法不是能够对常量值强制类型约束吗?我能想到的任何解释都感觉像是假的。而且我的解释都没有解释这个事实constinti=1;float*pf=i;编译失败。谁能解释一下? 最佳

c++ - int main(void) 在 C++ 中有效吗?

C++标准列出了main允许的形式。它没有将intmain(void)列为允许的形式。但是,它通常指出Theparameterlist(void)isequivalenttotheemptyparameterlistintmain(void)是一种允许的形式吗? 最佳答案 来自N3936标准草案:3.6Startandtermination3.6.1Mainfunction2Animplementationshallnotpredefinethemainfunction.Thisfunctionshallnotbeoverloade

c++ - 三元运算符在 `int` 和 `float` 上的结果

简而言之,我有以下代码:floatx=cond?0:x_option;其中x_option是一个template,它有一个operatorfloat()(并且没有其他自动转换运算符。注意此转换后表达式的类型:bool?int:float;我希望这个表达式的结果是float:C11:Ifboththesecondandthirdoperandshavearithmetictype,theresulttypethatwouldbedeterminedbytheusualarithmeticconversions,weretheyappliedtothosetwooperands,isthe

c++ - 为什么我不能使用 static_cast<int&> 将整数引用参数传递给 C++ 中的函数?

我在C++程序中有一个枚举参数,我需要使用一个通过参数返回值的函数来获取它。我首先将其声明为int,但在代码审查时被要求将其键入为枚举(ControlSource)。我这样做了,但它破坏了Get()函数——我注意到C风格的转换为int&解决了这个问题,但是当我第一次尝试用static_cast修复它时,它没有编译。为什么会这样,为什么当eTimeSource是一个int时根本不需要强制转换来通过引用传递整数?//GetCuePropertyValuesignatureis(intcueId,intpropertyId,int&value);ControlSourceeTimeSourc

c++ - void() 和 void{} 有什么区别?

基本上,我想知道为什么编译器拒绝ptr2声明:intmain(){//thisoneworksdecltype(void())*ptr1;//thisonedoesnotdecltype(void{})*ptr2;}看看thiscode如果你认为ptr1是一个函数指针:#includeusingnamespacestd;templatevoidf(Tt){cout输出是voidf(T)[withT=void*]。 最佳答案 [expr.type.conv]2TheexpressionT(),whereTisasimple-type-

c++ - 为 std::pair<int, int> 重载运算符>>

我正在尝试使用boost::lexical_cast在std::pair上.#include#include#includenamespacemy{//Whenmy_pairisauserdefinedtype,thisprogramcompiles//andrunswithoutanyproblems.//Whendeclaringmy_pairasanaliasofstd::pair,//itfailstocompile/*structmy_pair{intfirst;intsecond;};*/usingmy_pair=std::pair;std::istream&operato

c++ - (int32_t) 255 << 24 是 gcc (C++11) 中的未定义行为吗?

在C++11中,根据en.cppreference.com,Forsignedandnon-negativea,thevalueofaa*2bifitisrepresentableinthereturntype,otherwisethebehaviorisundefined.我的理解是,因为255*224不是表示为int32_t,评价(int32_t)255产生未定义的行为。那是对的吗?这可以吗编译器依赖?如果重要的话,这是一个IP16环境。背景:这来自anargumentIamhaving与arduino.stackexchange.com上的用户。在他看来,“没有什么对此根本没有定

c++ - 使用 boost spirit (longest_d) 解析 int 或 double

我正在寻找一种将字符串解析为int或double的方法,解析器应该尝试这两种选择并选择与输入流的最长部分匹配的那个。有一个已弃用的指令(longest_d)完全符合我的要求:number=longest_d[integer|real];...既然它已被弃用,还有其他选择吗?如果有必要实现语义操作来实现所需的行为,有人有什么建议吗? 最佳答案 首先,请切换到SpiritV2-多年来它已经取代了经典spirit。其次,您需要确保首选int。默认情况下,double可以很好地解析任何整数,因此您需要改用strict_real_polici

c++ - 为什么将 '0' 添加到 int 数字允许转换为 char?

我到处都看到这样的例子:inti=2;charc=i+'0';strings;s+=char(i+'0');但是,我还没有看到为什么添加零允许转换的解释。 最佳答案 如果您查看ASCII表,asciitable,您会看到数字从48(表示“0”)开始,一直到57(表示“9”)。因此,为了获得数字的字符代码,您可以将该数字添加到“0”的字符代码。 关于c++-为什么将'0'添加到int数字允许转换为char?,我们在StackOverflow上找到一个类似的问题:

c++ - 为什么 `const int ci = 2; std::forward<int>(ci);` 不起作用以及如何修复/解决它?

简单的问题,为什么不thefollowing工作(意味着ci的拷贝)?#includeintmain(){constintci=2;std::forward(ci);}prog.cpp:Infunction'intmain()':prog.cpp:6:23:error:nomatchingfunctionforcallto'forward(constint&)'问题在编写一些模板内容时表现出来,我有一个简单的holder类型,如下所示。为了避免不必要的拷贝,我尽可能使用完美转发,但事实证明这似乎是问题的根源。templatestructholder{Tvalue;holder(T&&v