草庐IT

C++标准

全部标签

c++ - 标准是否保证 uint8_t、int8_t 和 char 都是唯一类型?

似乎以下内容可以保证通过(已询问here):#includestatic_assert(!std::is_same_v);static_assert(!std::is_same_v);引用cppreference[char]hasthesamerepresentationandalignmentaseithersignedcharorunsignedchar,butisalwaysadistincttype是否也保证int8_t和uint8_t根据显式签名类型定义未定义就char而言,因此也形成一组具有char?的3种不同类型#include#includestatic_assert(

c++ - C/C++ 很酷的宏定义?

除了__LINE__和__FILE__,还有其他有用的预定义宏吗,比如__FUNCTION_NAME__?如果没有,但您知道其他很酷/有用的已定义宏(尤其是用于调试目的),我很想听听它们。有人问过平台:我在MacOSX上使用gcc/g++。 最佳答案 我可以找到以下内容(来自C99草案的描述,但我认为它们在C89中也可用):__DATE__:预处理翻译单元的翻译日期:一个字符形式为“Mmmddyyyy”的字符串文字,其中月份与asctime函数生成的月份相同,并且如果值小于10,dd的第一个字符是空格字符。如果翻译日期不可用,一个实

c++ - 'long long int' 被解释为 'long int' 。我该如何解决这个问题?

我正在为我的大学数学类(class)做一个涉及C语言编程的项目。我需要能够处理比可以存储在“longint”数据类型中的大整数更大的整数。所以我尝试使用“longlongint”,但如果我尝试这样的事情:longlongintnumber;number=10000000000;然后错误消息显示'错误:整数常量对于“长”类型来说太大'。我已经尝试过其他数据类型,例如“___int64”和“int_64t”我已经尝试过包括所有标准c库,但我仍然遇到同样的问题。奇怪的是,当我尝试'printf("LLONG_MAX=%lld\n",LLONG_MAX);'时,我得到了这个:LLONG_MAX

c++ - C89 或 C++03 是否定义了严格的别名规则?

我看过severalassertionsC89和C++03定义了严格的别名规则。但是,我无法在标准中找到该特定位。我的理解是C99中添加了严格的别名规则。 最佳答案 此文本出现在C89,§3.3表达式中:Anobjectshallhaveitsstoredvalueaccessedonlybyanlvaluethathasoneofthefollowingtypes:thedeclaredtypeoftheobject,aqualifiedversionofthedeclaredtypeoftheobject,atypethatis

c++ - 在 C 和 C++ 中没有定义的函数 main

为什么这段代码在C中编译成功,而在C++中却报错?intmain;它在托管环境中是否符合标准?你能引用标准吗?我已经用gcc测试过了。 最佳答案 WhythiscodecompilesuccessfulinCandwillgiveyouanerrorinC++?由于C++名称修改。基本上,在所有实际实现中,链接器寻找名为main的symbol(或其变体,我在Apple平台上看到过_main)-在C中,它可以是main()函数或名为的外部存储变量main-关键是通常C实现(编译器、工具链)在链接器级别不区分变量和函数,这就是为什么提供

c++ - 双重标准?为什么只对 char* const& a = "bla"发出警告?

在尝试深入研究thisquestion等案例背后的机制之后暴露了,我仍然不明白为什么下面代码中的第三行只生成警告,而第二行是错误。intmain(){constchar*const&a="bla";//Validcodeconstchar*&a2="bla";//Invalidcodechar*const&a3="bla";//Shouldbeinvalidbutsettlesforawarningreturn0;}我知道虽然引用初始化正在将字符串文字转换为指针引用,但它不应该删除任何cv-qualifiers对象具有,并且由于转换后的类型是constchar*const(从字符串文字

c++ - malloced 数组和新数组之间有区别吗

我通常使用C++编程,但正在为我的char*使用一些库函数。一些像“getline”这样的联机帮助页说输入应该是一个malloced数组。可以改用“new”吗?对于我的小样本,我可以看到它有效,但这会不会在某个时候导致一些奇怪的未定义行为?我知道“new”应该匹配“delete”,而“malloc”应该匹配“free”。我也没有使用std::string。这是故意的。谢谢 最佳答案 传递给getline()的缓冲区必须被分配。原因是如果需要更多空间,getline()可能会在缓冲区上调用realloc()。realloc()与fre

定义自身内部类的标准实例(C ++)

我正在尝试制作自己的vector3类(3D矢量类),但是我发现了一个小问题。我的目标是定义:staticconstVector3zero=Vector3(0.0,0.0,0.0);staticconstVector3one=Vector3(1.0,1.0,1.0);在vector3类内部,我可以通过以下方式访问它们:Vector3::zero;Vector3::one;但是似乎(如果我理解问题)我无法在同一类内部声明一个类实例(例如vector3定义中的vector3),可能是因为当我声明零和一个时,vector3本身的定义未得出结论然而。您知道解决这个问题吗?我希望如果可能的话,不使用任何返

开放计算标准工作委员会(OCTC)聚焦全产业全场景,以开放计算推动数据中心基础设施创新与可持续发展​

在数字经济时代的今天,数据中心作为支撑企业数字化、智能化发展的主要基础设施,重要性越发突显,这也成为过去几年互联网中大型数据中心如雨后春笋般拔地而起的根本原因。更为重要的是,随着互联网数据中心技术的不断演进与发展,已经形成了一套比较完整的开放计算标准体系。然而,对于通用行业而言,受应用场景复杂多样、数据中心规模差异大等各种因素的影响,技术与产品形态多样,并没有形成一种成熟的开放计算体系。随着传统企业数字化转型进程的加速,他们对于数据中心高效、智能、低碳的要求越来越高,将互联网开放计算的创新成果及通用行业应用需求进行融合创新,将会有效推动数据中心基础设施创新与可持续发展。而这,就是开放计算标准工

c++ - std::move(std::unique_ptr()) 组合是否有标准缩写?

我终于要将我的代码库迁移到C++11,这会产生更短更好的代码。但是我发现当我用一个新的指针调用函数时,它比以前长了很多:voidaddCallback(Callback*);//Takesownershipofcallback.//...addCallback(newCallback);//Clear.成为voidaddCallback(std::unique_ptr);//Nocommentneedednow!//...addCallback(std::move(std::unique_ptr(newCallback)));//bleh.提议的make_unique()模板函数只会在