jjzjj

implicit

全部标签

c++ - VS 编译警告 : result of 32-bit shift implicitly converted to 64 bits

VisualStudio2013发出恼人的(看似无关紧要的)编译警告:#include#definePRECISION16uint64_thi=0;for(uint8_ti=0;i这是编译警告:warningC4334:'改1好像解决了至1.所以我一直在尝试找出1中可能出现的问题.显然,如果i>=PRECISION,那么左移操作将产生未定义的行为。但是,变量i不超过PRECISION-1的值.此外,即使我们假设编译器无法推断出这个事实,我也看不出这个编译警告与左移操作数导致的潜在未定义行为有什么关系。也许它假定PRECISION-1-i的无符号值可以大于31。但是我应该如何告诉编译器它

c++ - 析构函数 : triviality vs implicit definition

根据我对标准的理解,普通析构函数是一种隐式声明的析构函数,其类只有基本和非静态成员以及普通析构函数。鉴于此定义的递归性,在我看来,唯一的“递归停止”条件是找到具有非隐式声明的析构函数(即用户声明的)的基类或非静态成员。如果那是对的,那应该意味着一个普通的析构函数是一个“不需要做任何事情”的析构函数,因此它将被声明(隐式地)但不被定义。换句话说:根据标准定义,隐式定义析构函数(即“它做某事”)不能是微不足道的说法是否正确?很抱歉提出这种愚蠢的问题,但我想澄清一下我的想法...... 最佳答案 没有。隐式定义的平凡析构函数根据定义是平凡

c++ - 为什么某些隐式类型转换在一台机器上是安全的而不是在另一台机器上?我怎样才能防止这个跨平台问题?

我最近在我的代码中发现了一个错误,我花了几个小时来调试。问题出在定义为的函数中:unsignedintfoo(unsignedinti){longintv[]={i-1,i,i+1};...returnx;//evaluatedbythefunctionbutnotessentialhowforthisproblem.}v的定义在我的开发机器(ubuntu12.0432位,g++编译器)上没有造成任何问题,其中unsignedint被隐式转换为longint,因此负值得到了正确处理。在不同的机器上(ubuntu12.0464位,g++编译器)但是这个操作并不安全。当i=0时,v[0]没

c++ - std::map 和 -fno-implicit-templates

我正在尝试使用g++4.4进行编译并链接一个使用STL的简单程序。我正在尝试使用-fno-implicit-templates来做到这一点,因此必须显式实例化所有模板。我不明白为什么此代码有效:#include//templateclassstd::map;templateclassstd::_Rb_tree,std::_Select1st>,std::less,std::allocator>>;intmain(){std::maptable;return0;}我希望这个程序需要这一行:templateclassstd::map;,但是该行不会使程序链接。std::_Rb_treeli

c++ - 从模板基类派生的类的隐式转换

我在隐式转换、模板和模板类继承方面遇到了问题。以下是我从我的项目中提取的内容,我省略了一些类甚至是抽象的,但这与大小写无关。classA{};classB:publicA{};templateclassBase{};classDerived:publicBase{};intmain(){Derivedd;Base*base=newDerived();}基本上,我有一个模板基类Base我得出Derived:publicBase从。然后我必须将它转换为最常见的Base形式,即Base.我原以为我可以转换一个派生自Base的对象至Base隐含地,作为B源自A.我做错了什么或者我怎么能隐式?这

c++ - 为什么 implicit == on map<<int,MyClass> 不编译?

我在为我的一个类(class)定义==时遇到了一个奇怪的问题。我将此处的代码简化为我在visual2013上测试过的示例;MyClass在命名空间N中定义这确实编译:N::MyClassa,b;booltest=a==b;这也是:constN::MyClassa,b;booltest=a==b;这不编译std::mapa,b;booltest=a==b;供您引用,=​​=运算符声明如下:booloperator==(constN::MyClass&a,constN::MyClass&b);这是我得到的错误:errorC2678:binary'==':nooperatorfoundwhi

c++ - 错误 : definition of implicitly declared copy constructor

我目前正在处理的QtC++项目有问题。这是我要介绍的一个新部分,但我发现它有点令人困惑。我创建了一些由股票、债券和储蓄类继承的Assets类。这一切都很好。然后我创建了一个名为AssetList的类,它派生了QList,这个类是我发现问题的地方。这是我目前的代码。资源列表.h#ifndefASSET_LIST_H#defineASSET_LIST_H#include"Asset.h"#includeclassAssetList:publicQList{public:AssetList(){}~AssetList();booladdAsset(Asset*);Asset*findAsse

C++ 错误 : definition of implicitly-declared

我正在用C++编写这个链表程序当我测试程序时,我得到了错误linkedlist.cpp:5:24:error:definitionofimplicitly-declared'constexprLinkedList::LinkedList()'LinkedList::LinkedList(){这是代码链表.h文件:#include"node.h"usingnamespacestd;classLinkedList{Node*head=nullptr;intlength=0;public:voidadd(int);boolremove(int);intfind(int);intcount(i

c++ - 什么时候加载 DLL : Implicit Linking VS Explicit Linking

我认为隐式链接会在应用程序启动时立即加载DLL,因为它也称为“加载时动态链接”。但是我在下面的链接中发现了一些奇怪的解释(https://msdn.microsoft.com/en-us/library/253b8k2c(VS.80).aspx)。隐式链接Liketherestofaprogram'scode,DLLcodeismappedintotheaddressspaceoftheprocesswhentheprocessstartsupanditisloadedintomemoryonlywhenneeded.Asaresult,thePRELOADandLOADONCALLc

c++ - 隐式声明的 move 操作不会回退到复制?

我读过N3291“12.8.(11/15/28)Copyingandmovingclassobjectsclass.copy]”是否更正了隐式声明的move构造函数对所有非静态数据成员进行元素级move(可能通过分别定义的T(T&&)如果无法move任何非静态数据成员,隐式move构造函数将被标记为已删除并且不会尝试复制作为“后备”?(是的,move是为内置类型定义的,但实际上是一个拷贝)。同样move赋值,使用元素各自的Toperator=(T&&)。例子:structCopyOnly{CopyOnly();CopyOnly(constCopyOnly&);};//declaring