草庐IT

用这个

全部标签

c++ - 为什么这个模板函数可以成功编译?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Destructorsofbuiltintypes(int,charetc..)模板函数:templatevoidkill(T*type){type->~T();}调用:intx=5;kill(&x);哇哦,编译成功了!?像int这样的原始类型怎么会有析构函数?它还与char、bool等一起工作。

c++ - 在用 C++ 编写这个对象数组时,我做错了什么?

我有两个类,PersonnelLists和Employee。我在main中创建了一个PersonnelLists实例,如下所示:intmain(){PersonnelListsexample;//Makeapersonnellist...}PersonnelLists使用构造函数对员工列表、员工数量和数组大小进行成员初始化:PersonnelLists::PersonnelLists():List(newEmployee[SIZE]),numEmployees(0),arraySize(SIZE){}这会导致创建一些空的空员工(我认为?):Employee::Employee():em

c++ - C++ 的 GeoIP 有这个库吗?

我看了又看,但找不到GeoIP的C++版本。我知道它有一个C版本,但我似乎无法让它与MicosoftVisualStudio2012C++一起工作我试过:CompileMaxmindClibrarywithvisualstudio2010http://dev.maxmind.com/geoip/所以,是否存在GeoIPC++版本?是否有另一个像C++中的GeoIP一样对国家/地区进行IP处理的库?是否有关于如何使用C++使用GeoIP的教程?很抱歉提出所有问题,但我看了又看,似乎找不到解决方案。 最佳答案 聚会迟到了,但我最近为Ma

c++ - 使用 lambda 作为模板参数时,这个编译器错误是什么?

编辑:这已被报告为MicrosoftConnect上的VS2012C++编译器错误(link).十一月2014年1月11日:Microsoft已回应称,此错误的修复应该出现在VisualC++的下一个主要版本中。我一直在为一条我不理解的VS2012编译器错误消息而苦苦挣扎,所以我将问题缩减到最低限度。我正在使用VS2012构建以下main.cpp:#includetemplatestructA{Tx;A(A&&other):x(std::move(other.x)){}A(T&&x):x(std::move(x)){}};templateAbuild(T&&x){returnA(std

c++ - 为什么 g++(4.6 和 4.7)将这个除法的结果提升为 double ?我能阻止吗?

我正在编写一些模板代码来对同时使用float和double的数值算法进行基准测试,以便与GPU实现进行比较。我发现我的浮点代码速度较慢,在调查使用Intel的VtuneAmplifier后,我发现g++正在生成额外的x86指令(cvtps2pd/cvtpd2ps和unpcklps/unpcklpd)以将一些中间结果从float转换为double然后再返回再次。此应用程序的性能下降了近10%。在使用标志-Wdouble-promotion编译后(顺便说一句,-Wall或-Wextra不包含),果然g++警告我结果正在提升。我将其简化为如下所示的简单测试用例。请注意,C++代码的顺序会影响

c++ - 这个 C++ 模式的名称及其背后的原因是什么?

在我公司的C++代码库中,我看到很多这样定义的类://FooApi.hclassFooApi{public:virtualvoidsomeFunction()=0;virtualvoidsomeOtherFunction()=0;//etc.};//Foo.hclassFoo:publicFooApi{public:virtualvoidsomeFunction();virtualvoidsomeOtherFunction();};Foo是唯一继承自FooApi的类,接受或返回指向Foo对象的指针的函数使用FooApi*代替。它似乎主要用于单例类。这是编写C++代码的常见命名方式吗?这

c++ - 为什么字符串连接宏不适用于这个 "+"案例?

小问题:是否允许为字符串连接宏##连接特殊符号,例如+、-?例如,#defineOP(var)operator##varOP(+)会扩展为operator+吗?具体问题:#include"z3++.h"#includenamespacez3{z3::exproperator+(z3::exprconst&,z3::exprconst&);}typedefz3::expr(*MyOperatorTy)(z3::exprconst&,z3::exprconst&);#defineSTR(var)#var#definez3Op(var)static_cast(&z3::operator##v

c++ - 哪个命名空间包含这个友元函数的声明?

下面的friend函数不是通过普通查找(§7.3.1.2/3)找到的,而是通过ADL找到的(§3.4.2/4第二个要点),因此代码编译通过并正常执行(liveexample)。但是函数f没有在任何命名空间中声明。例如,如果您尝试将调用f(x);替换为这些调用中的任何一个::f(x);,A::f(x);或A::X::f(x);,代码将无法编译。哪个命名空间包含这个友元函数的声明?标准对此有何规定?#includenamespaceA{classX{inti;friendvoidf(Xx){std::cout 最佳答案 来自C++标准1

c++ - 这个函数重载是否正确?

考虑在一个C++程序中包含这四个函数:voida(intval){cout我有几个问题:代码会不会有什么错误?还是它们都重载而没有任何错误。你能告诉我如何正确调用所有这四个函数吗?我的尝试如下:intiTmp;int*pTmp;doubledTmp;a(iTmp);a(iTmp);a(pTmp);a(dTmp); 最佳答案 唯一的问题是函数:voida(int&val)和voida(intval)编译器会产生以下错误:Compilationerrortime:0memory:3140signal:0prog.cpp:Infuncti

C++ 这个很少使用的构造函数语法是什么?

编辑:我认为这不是thisotherquestion的拷贝,因为另一个问题只是在构造函数中将()转换为{}。而我注意到当构造函数在struct中定义时的不同行为,而不是在class中。(而且,正如评论中所指出的,这是关于使用构造函数而不是编写它们。)但我以前错了。我在辅导时遇到了构造函数的这种奇怪的(对我来说)语法:Fooobj{i,j};起初我认为它行不通,并告诉学生重写它——但他们坚持认为它行得通,并告诉我他们从cplusplus.com上提取了示例,towhichI'venotbeenabletofindareference,所以我还是尝试了一下......它奏效了。所以我试验了