草庐IT

c++ - 为什么 g++ 会生成两个具有不同名称修饰的构造函数?

这个问题在这里已经有了答案:Dualemissionofconstructorsymbols(1个回答)关闭9年前。测试用例如下://test.cppclassX{public:X();};X::X(){}voidfoo(){Xx;}编译它并像这样读取目标文件中的符号:[root@localhosttmp]#g++-ctest.cpp[root@localhosttmp]#readelf-s-Wtest.o符号表'.symtab'包含12个条目:Num:ValueSizeTypeBindVisNdxName0:00000000000000000NOTYPELOCALDEFAULTUND

c++ - 模板中有两个默认参数,这里有什么问题?

下面的代码显示了2个Foo模板,每个模板都有2个默认参数,Foo1有一个单独的原型(prototype)而Foo2没有,它们在其他方面是一样的。为什么第一次调用Foo1会导致编译器(VS2010NativeC++)产生错误,而其他3个调用正常?#include//notneededbuttopreventanswersinthisdirection...#undefmax#undefmintemplatevoidFoo1(Tv1=std::numeric_limits::min(),Tv2=std::numeric_limits::max());templateinlinevoidFo

c++ - 嵌套命名空间 : where should default template arguments go? 中模板类的前向声明

我在嵌套命名空间中有一个模板类的前向声明namespacen1{namespacen2{templatestructA;}usingn2::A;}接着是一个定义,实际上它在不同的文件中,中间有一些东西:structX{};namespacen1{namespacen2{templatestructA{};}usingn2::A;}那么以下总是可以的:n1::n2::Aa;但是这个捷径n1::Aa;在clang中给出编译错误error:toofewtemplateargumentsforclasstemplate'A'除非我删除前向声明;g++两者都接受。clang似乎保留在第一个不包含

c++ - 将 `std::default_delete` 专门化为 `std::shared_ptr`

我有这样的想法:namespacestd{templateclassdefault_delete{public:voidoperator()(IplImage*ptr)const{cvReleaseImage(&ptr);}};};typedefstd::shared_ptrIplImageObj;我没有真正找到太多信息是否支持我专门化default_delete以及shared_ptr是否也默认使用default_delete。它的工作方式与Clang5.0.0的预期一致。那么,支持吗?如果STL实现有不同的内部命名空间怎么办?那它不会找到我的声明吗?但它应该会在声明中出错。

c++ - 强制执行显式默认的特殊成员函数生成

在C++11中,可以显式默认一个特殊成员函数,如果它的隐式生成被自动阻止。但是,显式默认一个特殊成员函数只是撤销手动声明一些其他特殊成员函数(复制操作、析构函数等)导致的隐式删除,它不会强制编译器生成函数和代码即使函数实际上无法生成,也被认为是良构的。考虑以下场景:structA{A()=default;A(constA&)=default;A(A&&)=delete;//Moveconstructorisdeletedhere};structB{B()=default;B(constB&)=default;B(B&&)=default;//Moveconstructorisdefau

C++14 非聚合的统一初始化

我使用的是VisualC++2013。当类是聚合时,它是零初始化的。当它是非聚合时,它似乎是默认初始化的并且不确定。这是为什么?#includeusingnamespacestd;classTest_1{public:inti;voidf(){};};classTest_2{public:inti;virtualvoidf(){};};intmain(){Test_1t1{};Test_2t2{};cout 最佳答案 如果你的编译器这样做,它就坏了。[dcl.init.list]/p3(所有引用均来自N4140):List-init

c++ - 为了保持全局空间空闲,我应该在哪里放置我的类需要的常量?

首先:我知道如何编写程序,所以我不会寻求帮助。但是,我正在粘贴该问题的拷贝,以便您了解作业的内容。我的问题专门针对您将变量放在哪里以防止将所有内容都全局化?作业设计一个名为Date的类,该类具有用于存储月、日和年的整数数据成员。该类应该有一个三参数默认构造函数,允许在创建新的Date对象时设置日期。如果用户创建一个Date对象而不传递任何参数,或者传递的任何值无效,则应使用默认值1、1、2001(即2001年1月1日)。该类应具有成员函数以下列格式打印日期:3/15/10March15,201015March2010问题1)老师指导我们避免在代码中使用魔数(MagicNumber),所

MySQL之Field‘***’doesn’t have a default value错误解决办法

目录一、找到mysqlServer文件夹,打开my.ini配置文件,查找如下语句:二、修改成如下:PS:如何找到my.ini文件。第一步右键我的电脑(计算机)——点击管理(G),如下图所示:第二步:点击服务和应用程序----服务选项 第三步:在右边服务中找到mysql之后右键--属性第四步:这样你就可以看到你的mysql的路径了:LAST:做一下总结首先排查一下数据库中对应的字段是否是设置为不能为空,以至数据插入不进去。个人就是这个缘由解决的。下面,说一下遇到相同问题的其余解决办法,方便出现问题的同窗参考:(windows环境)MySql一、找到mysqlServer文件夹,打开my.ini配

c++ - 未知模板类型的默认值或零值

假设模板函数templateTfoo(){//...//Erroroccuredif(error)return0;//...}应该返回0、0.0f、nullptr,...取决于T类型,发生错误时。如何获取未知模板类型的0?在C#中,您可以编写default(T)来执行此操作。如何在C++中执行此操作? 最佳答案 您可以像returnT();或returnT{};(C++11起)那样使用valueinitialization,或者只是return{};(参见listinitialization(sinceC++11))以返回T的默认值

c++ - 带有 std::enable_if 和 std::is_default_constructible 的 SFINAE 用于 libc++ 中的不完整类型

我刚刚在使用SFINAE检测模板类型是否默认可构造时观察到libc++的一个奇怪问题。以下是我能够想出的一个最小示例:#include#includetemplatestructDummy;templatestructDummy{};templatestructhas_dummy:std::false_type{};templatestructhas_dummy>::value>>:std::true_type{};intmain(){std::cout{}(){}()它编译并输出预期的行true和false使用libstdc++使用g++或clang++编译时.但是,当我尝试使用li