草庐IT

c++ - Ideone和Codepad真的不支持C++03吗?

我的问题与Prasoon有关的question关于非POD类型和值初始化。我在Ideone和Codepad等在线编译器上尝试了以下代码,但可执行文件在两个站点上都出现了运行时错误。#include#includestructStruct{std::stringString;intInt;boolk;};structInStruct:Struct{InStruct():Struct(){}};intmain(){InStructi;assert(i.Int==0);std::coutIdeone输出here键盘输出here这是否意味着它们都不支持C++03值初始化功能?

c++ - 如何确定一个类型在 C++03 中是否可取消引用?

在C++03中,如何确定类型T是否可解引用?我的意思是,如何静态确定*t是否是T类型的t的有效表达式?我的尝试:templatestructenable_if{};templatestructenable_if{typedefTtype;};unsignedchar(&helper(voidconst*))[2];templatetypenameenable_if(NULL)),unsignedchar>::typehelper(T*);templatestructis_dereferenceable{staticboolconstvalue=sizeof(helper(static_

c++ - 是否有 C++11 到 C++03 的转换器?

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。是否有这样的工具能够将使用某些C++11功能的代码转换为C++03兼容代码(可能使用一些第三方库,如Boost)?

C++03 通过构造函数将 vector move 到类成员中( move 语义)

我只能访问C++03,而且我经常想像在C++11中那样将vectormove到函数中。如何做到这一点的问题不会过多地混淆代码的用户。所以我的问题是在C++11之前程序员是如何做到的。我知道可以使用交换函数“move”vector。所以这就是我想出的:classFoo{public:Foo(std::vector&vec){usingstd::swap;swap(vec,m_vec);//"move"vecintomembervector}private:std::vectorm_vec;};//usage:std::vectorv(100,1337);Foofoo(v);//v.emp

c++11 有时会包含 <cstdlib> 而 c++03 不会?

看看这个小程序。#includeintmain(){intvar=atoi("-99");//convertstringtointvar=abs(var);//takesabsolutevaluestd::cout编译产生以下错误信息:$g++-omainmain.cppmain.cpp:Infunction‘intmain()’:main.cpp:5:13:error:‘atoi’wasnotdeclaredinthisscopemain.cpp:6:16:error:‘abs’wasnotdeclaredinthisscopemain.cpp:9:10:error:‘EXIT_SU

c++ - C++03 中缺少 typeof 运算符?

我只是想知道boost如何实现BOOST_TYPEOF(在C++03中)这似乎是一个非常有用的工具。有人有什么想法吗?此外,我认为C++03本身可以提供typeof运算符,尤其是当它已经具有sizeof(expr)时,必须也知道expr的类型,否则它怎么能在不知道类型大小/em>?真的有可能知道大小,而不知道表达式的类型吗?如果它不知道类型,那么编译器会告诉我们什么(如果不是类型)的大小?我的意思是,sizeof(unknowntype)对编译器(以及人类)没有意义! 最佳答案 它只是使用了编译器魔法。比如,GCC的__typeof

c++ - C++03 中默认初始化和值初始化的区别?

我一直认为创建一个新对象总是会调用对象的默认构造函数,而构造函数是显式的还是编译器自动生成的都没有区别。根据thishighlyregardedanswer对于另一个问题,这在C++98和C++03之间以微妙的方式发生了变化,现在的工作方式如下:structB{~B();intm;};//non-POD,compilergenerateddefaultctornewB;//default-initializes(leavesB::muninitialized)newB();//value-initializesBwhichzero-initializesallfieldssinceit

c++ - 如何定义支持 C++03 和 C++11 的 nullptr?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:“Backporting”nullptrtoC++-pre-C++0xprograms如何定义nullptr同时支持C++03和C++11?下面的代码是否同时使用C++03和C++11编译而没有改变nullptr在C++11编译器中的含义?#include#if!defined(nullptr)#definenullptrNULL#endif

C++11 和 C++03 对 std::string 的小字符串优化的支持不同?

在C++11标准的兼容性附录中,从C++03到C++11的变化之一描述如下:C.2.11Clause21:stringslibrary21.4.1Change:Loosenbasic_stringinvalidationrulesRationale:Allowsmall-stringoptimization.Effectonoriginalfeature:ValidC++2003codemayexecutedifferentlyinthisInternationalStandard.Someconstmemberfunctions,suchasdataandc_str,nolonger

c++ - C++03 保证 `double` 准确表示小整数吗?

C++03标准是否保证足够小的非零整数在double中准确表示??如果不是,那么C++11呢?请注意,我不假设此处符合IEEE。我怀疑答案是否定的,但我希望被证明是错误的。当我说足够小时,我的意思是,受一些值的限制,这些值可以从C++03的保证中导出,甚至可以根据通过std::numeric_limits提供的值计算得出。.编辑:很明显(现在我已经检查过了)std::numeric_limits::digits与DBL_MANT_DIG相同,和std::numeric_limits::digits10与DBL_DIG相同,对于C++03和C++11都是如此。此外,关于DBL_MANT_