草庐IT

C++标准

全部标签

c++ - 标准 C 函数 : Check for -1 or 0?

许多标准的C和POSIX函数在错误时返回-1,在成功时返回0,例如truncate,fflush,msync等intret=truncate("/some/file",42);使用ret!=-1或ret==0检查是否成功更好,为什么?我的想法根据我的经验,大多数人会检查错误情况(ret!=-1),因为通常只有一个(考虑返回NULL或的函数>EOF错误)。然而事后看来,这些函数可以从直接返回errno中获益(其中0被认为没有错误)。还有一个担心是函数返回的不是0或-1,或者稍后添加了额外的返回值。在这些情况下,测试指示成功的“最严格”值范围是有意义的(ret==0)。更新0我的假设是人们

c++ - 此 C/C++ if() 语句的计算结果是否为 TRUE?

根据PC-lint,以下语句永远不会TRUE:if((variable&0x02)==1)我正在为嵌入式系统使用C编译器,只要设置了variable中的相应位,它就会将其评估为TRUE。我猜编译器正在对==的两侧进行TRUE/FALSE比较,而不是比较结果数字。换句话说,每当表达式(varable&0x02)不为零(即TRUE)时,语句也将为TRUE,因为值1也是TRUE(不是零)。我不知道C/C++标准是否明确定义了编译器在这种情况下的行为方式。有没有C/C++专家可以根据标准(例如C90、C99等)回答这个问题?P.S.:在上面的语句中,“variable”是一个unsignedc

c++ - C++ 标准中 pair<> 的全局不等式比较

根据cppreference:Ininequalitycomparisons(),thefirstelementsarecomparedfirst,andonlyiftheinequalitycomparisonisnottrueforthem,thesecondelementsarecompared.翻译成这样:return((a.first我的问题是,为什么它如此不直观?背后的原因是什么?有没有这种推理得出正确答案的例子?我认为实现只是:returna.first 最佳答案 这种比较称为lexicographicalorderi

c++ - 使用#pragma 优化的代码的可移植性如何?

使用#pragmaoptimize的代码的可移植性如何?大多数编译器都支持它吗?对此#pragma的支持有多完整? 最佳答案 #pragma是编译器添加非认可和不可移植语言扩展的认可和可移植方式*.基本上,您永远无法确定,并且至少有一个主要的C++编译器(g++)不按原样支持此pragma。*:来自C++标准(N3242):16.6Pragmadirective[cpp.pragma]Apreprocessingdirectiveoftheform#pragmapp-tokensoptnew-linecausestheimpleme

c++ - 为什么 isdigit() 如果为真则返回 2048?

谁能解释为什么isdigit返回2048如果为真?我是ctype.h库的新手。#include#includeintmain(){charc='9';printf("%d",isdigit(c));return0;} 最佳答案 因为这是允许的。C99标准只说明了isdigit、isalpha等:Thefunctionsinthissubclausereturnnonzero(true)ifandonlyifthevalueoftheargumentcconformstothatinthedescriptionofthefunctio

c++ - 当 STL 容器对象的值不可复制构造时,如何将其附加/复制到另一个对象,例如标准::线程

我想将一个std::map容器对象移动到另一个。最简单的形式:#include#include#includeusingnamespacestd;intmain(){map>m1,m2;//m1isupdatedm1.insert(m2.begin(),m2.end());//但是它给出了error的页面:error:useofdeletedfunction‘std::thread::thread(conststd::thread&)’如何实现? 最佳答案 std::thread不可复制构造,您必须使用允许移动的迭代器:m1.ins

c++ - C++ 标准库如何链接到我的应用程序?

当我通常使用来自第3方(非标准)C++库的代码(包括header)时,预构建的二进制文件链接到(或包含在)代表我的应用程序的目标可执行文件中,但是C++会发生什么标准库?,据我所知,我不必将库与仅使用C++标准库代码的应用程序一起发布,因此代码是否静态链接并包含在可执行文件中? 最佳答案 不,默认情况下标准库是在运行时动态链接的。运行动态加载程序时,如果发现动态库加载并运行,它将在几个标准位置查找动态库,否则应用程序将退出。在Unix系统上:/usr/lib:寻找:libstdc++*在Windows上:c:\windows\sys

c++ - 为什么 C++ 标准 1.9/5 谈论 "possible execution sequences"?

根据C++03标准1.9/5Aconformingimplementationexecutingawell-formedprogramshallproducethesameobservablebehaviorasoneofthepossibleexecutionsequencesofthecorrespondinginstanceoftheabstractmachinewiththesameprogramandthesameinput.我不明白“作为其中一个”部分。如果我有一个特定的程序和一个特定的输入,并且我的程序不包含未定义的行为,为什么可观察到的行为会有所不同?“一种可能的执行顺

C++ 标记化标准字符串

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoItokenizeastringinC++?你好,我想知道如何用strtok标记一个std字符串stringline="hello,world,bye";char*pch=strtok(line.c_str(),",");出现以下错误error:invalidconversionfrom‘constchar*’to‘char*’error:initializingargument1of‘char*strtok(char*,constchar*)’我正在寻找一种快速简便的方法来解决这个问题,因为我认为

c++ - 为什么我们需要为指针放置 *

我在阅读有关指针的内容时突然想到,如果指针只是一个存储变量内存地址的变量,那么每个整数都应该用作指针。然后我创建了一个小程序,它发出警告但不知何故起作用了。intmain(){inti,j;i=3;j=&i;printf("%d\n%d\n%d",i,j,&i);return0;}输出是316064166001606416600那么,如果正常的int就可以工作,为什么还要放一个额外的*呢?另一个问题是关于下面程序的输出intmain(){inta[]={1,2,3,4,5,6,7};int*i,*j;i=&a[1];j=&a[5];printf("%d\n%d\n%d",j,i,j-i