草庐IT

int_void

全部标签

c++ - 如何诊断 g++ 4.3.4 中对 sqrt(int&) 的模糊调用

我的代码如下:#include#includefloatfoo(floatf){std::cout即使使用-pedantic-std=c++98-Wall-Wextra也不会报告最后一行中的调用不明确,但它不一定在其他编译器中工作,因为同样的原因foo(i)没有。gcc将以下内容添加到命名空间std:templateinlinetypename__gnu_cxx::__enable_if::__value,double>::__typesqrt(_Tp__x){return__builtin_sqrt(__x);}也就是说,它为所有整数类型X添加了inlinedoublesqrt(X)

c++ - 为什么 push_back 签名是 void push_back (const value_type& val) 而不是 void push_back (value_type val)?

这个问题在这里已经有了答案:Passingbyvaluevsconst&and&&overloads(3个答案)关闭8年前。为什么push_back的函数签名如下?voidpush_back(constvalue_type&val);传递的值被复制到容器中,为什么不直接复制到参数列表中呢?voidpush_back(value_typeval);

c++ - 当 int 不是 int (intX_t)

我有些头疼导致这里出现问题。基本上,我正在尝试使库与不同的Arduino系统兼容(不是Arduino的问题)。我遇到了类型不再匹配的情况,因为int不再等同于其相同的固定宽度类型。在提供的有限环境中(没有stdlib等),我为我需要的功能编写了自己的类型特征类。使用GCC4.8.1(avr)和Extensa-1x106-GCC(ESP8266)一切正常,但在GCC4.8.3(SAM、SAMD内核)中却不行。基本上我已经敲定了我的代码以显示这个非常基本的代码中的问题(int被确认在失败的32位平台编译器上有4个字节):templatestructis_same{enum{value=fa

c++ - 为什么 Member Detector fallback 必须是 int?

我以为我正在理解这个类(从这里https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Member_Detector):templateclassDetectX{structFallback{intX;};//addmembername"X"structDerived:T,Fallback{};templatestructCheck;typedefcharArrayOfOne[1];//typedefforanarrayofsizeone.typedefcharArrayOfTwo[2];//typedefforanarrayofsizetw

c++ - 如何将 vector<unsigned char> 写入文件,后跟一个 unsigned int

我必须对5个unsignedcharvector进行分组(data_length=5)。在组的末尾,我想添加一个ID组并将它们(组数据+它的ID)写入文件。其中组ID类型integer。我按以下代码执行该任务。这是对的吗?下图显示了我正在服用的东西#definerandom(x)(rand()%x)std::ofstreamfilewrite("abc.raw",std::ios::out|std::ofstream::binary);unsignedintiter=0;unsignedintdata_length=5;unsignedintID_data=0;//----------

c++ - 函数返回 void 的无序函数评估

C和C++中是否有一种方法可以使返回void的函数以未指定的顺序求值?我知道函数参数以未指定的顺序求值,因此对于不返回void的函数,这可用于以未指定的顺序求值这些函数:#includeinthi(void){puts("hi");return0;}intbye(void){puts("bye");return0;}intmoo(void){puts("moo");return0;}voiddummy(inta,intb,intc){}intmain(void){dummy(hi(),bye(),moo());}由符合规范的编译器编译的合法C和C++代码可以按任何顺序打印hi、bye和

c++ - int a=int(); C++98 中会发生什么?

在您认为将其标记为重复之前,请完整阅读该问题。像这样的语句inti=int();大多数程序员会说这里有值初始化&i会被值初始化。(0作为输出)。但它也在C++98编译器上打印0作为输出。以下程序是我在C++98实现上测试的,输出为0。#includeintmain(){inti=int();std::cout在C++98以上程序中不要说i是值初始化,因为C++03引入了值初始化。那么我是如何在这里初始化的呢?它真的是构造函数调用吗?int()看起来像构造函数调用。正如Bjarnestroustrup在他的《C++编程语言和TC++PL》一书中所说,原始类型在C++中也有默认构造函数。C

c++ - std::promise<void> 抛出未知错误,除非调用 sleep

我有这个代码:#include#includeintmain(){std::promisep;p.set_value();p.get_future().get();return0;}用gcc编译后抛出std::system_error:$g++-ofoofoo.cpp-std=c++11-lpthread$./footerminatecalledafterthrowinganinstanceof'std::system_error'what():Unknownerror-1奇怪的是,在创建promise之前添加零秒sleep,防止了异常:intmain(){std::this_thre

c++ - 逗号运算符和 void 表达式

我遇到了这个代码片段1intreturn_printChar1(){//code//oops!noreturnstatement}intreturn_printChar2(){//codereturnprintf("Return");}intmain(){inti;//somemorecodei=return_printChar2();if((return_printChar1(),i)){printf("Gotcha");}}1:这不是现实生活中的例子。我的问题是“C和C++中是否明确定义了代码片段的行为?”我的看法:在C中,行为定义明确,因为6.5.17说Theleftoperan

c++ - 为什么 new int (*)[3] 是错误的?

typedefint(*A)[3];int(**p)[3]=newA;//OKint(**q)[3]=new(int(*)[3]);//OKint(**r)[3]=newint(*)[3];//error来自GCC的错误是error:expectedprimary-expressionbefore')'token。为什么这个表达式中需要额外的括号? 最佳答案 标准将new-type-id定义为最长的new-declarators序列。还有一个注释,它说明了类似的情况(尽管它分配了指向函数的指针):5.3.4New[expr.new]