草庐IT

c++ - 为什么大多数实现在 C++03 的全局命名空间中仍然有 cmath 函数?

据我了解,在C++03#include中必须仅在namespacestd中声明函数.从C++11开始,它们可以另外在全局命名空间中声明。这是大多数C++实现在全局命名空间中声明函数(大概是#includeing),然后就做了using::acos;的做法的结果。等namespacestd.但在我看来,实现在他们的中做这样的事情同样容易。:namespace__C_LANGUAGE_MATH_H{#include}//...namespacestd{//...using__C_LANGUAGE_MATH_H::acos;//...}为什么不这样做而不只是污染全局命名空间?我建议的解决方案

c++ - C++03中如何判断函数是否返回引用?

在C++11之前的版本中,当使用特定参数调用时,如何确定给定函数是否返回引用?例如,如果代码如下所示:templateboolreturns_reference(Ff){returnis_reference(f(5));}那我应该如何实现is_reference呢?请注意f也可能是一个仿函数,它的operator()可能有多个重载——我只关心通过我的参数实际调用的重载在这里。 最佳答案 这是一个基于SFINAE的解决方案,用于检查函数调用表达式是否产生左值:#include#include#include//Func:functio

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