草庐IT

base-font-size

全部标签

c++ - size_t ptrdiff_t 和地址空间

在我的系统上,ptrdiff_t和size_t都是64位。我想澄清两件事:我相信由于地址空间的限制,没有数组可以像size_t一样大。这是真的吗?如果是,那么是否可以保证ptrdiff_t能够保存最大数组中任何指针的减法结果? 最佳答案 不,没有这样的保证。例如,请参见此处:https://en.cppreference.com/w/cpp/types/ptrdiff_tIfanarrayissolarge(greaterthanPTRDIFF_MAXelements,butlessthanSIZE_MAXbytes),thatth

c++ - 编译错误 : base operand of ‘->’ has non-pointer type ‘Token’

我在尝试编译我的C++代码时遇到标题中提到的错误。我无法理解我在这里做错了什么。编译器在我执行booloperator==(Token)函数时出现问题。我认为这是使运算符(operator)重载的方法。关于为什么编译器不喜欢我提到的任何线索this->terminal还是this->lexeme?classToken{public:tokenTypeterminal;std::stringlexeme;Token*next;Token();booloperator==(Token&t);private:intlexemelength,line,column;};boolToken::o

c++ - vector < vector > : verify that all have equal sizes

是否有std/boost算法来验证一个vector中的所有vector是否具有相同的大小?推而广之,所有元素的属性都相同吗?在下面的示例中,我使用了我正在寻找的假设的std::all_equal:typedefstd::vectorLine;std::vectorlines;lines.push(Line(10));lines.push(Line(11));autoequalLengths=std::all_equal(lines.begin(),lines.end(),[](constLine&x){returnx.size();});(并且通过扩展:std::vectorvec;a

c++ - size_t 在哪里定义的?

所以我知道CCompatabilityHeaders中的任何标题:Placesintheglobalnamespaceeachnamethatthecorrespondingcxxxheaderwouldhaveplacedinthestdnamespace我还知道这些C头文件自c++17起已被弃用。,支持它们的兼容性“cxxx”对应物。现在,我相信size_t完全由StandardDefinesHeader定义.所以我认为这在技术上意味着全局命名空间中size_t的定义已被弃用?多年来我一直将它用作size_t,在我开始使用std::size_t之前,我希望得到确认。

c++ - 从 Derived* 转换为 Base*&

我试图回答提到的问题here通过传递对指针的引用而不是像这样指向指针的指针:classParent{};classChild:publicParent{};voidRemoveObj(Parent*&pObj){deletepObj;pObj=NULL;}intmain(){Parent*pPObj=newParent;Child*pCObj=newChild;pPObj=newParent();pCObj=newChild();RemoveObj(pPObj);RemoveObj(pCObj);//Thisisline32return1;}但这会在第32行产生以下编译器错误:erro

c++ - `size` 来自哪里?

我知道在某个地方应该有一个我不关心的删除运算符。我只是想知道,哇,它奏效了。“大小”的说法从何而来?#include#includeclassBase{public:Base(){}void*operatornew(unsignedintsize,std::stringstr){std::cout结果如下:记录新对象“基本实例1”的16字节分配 最佳答案 由编译器在编译时提供。当编译器看到:new("Baseinstance1")Base;它将添加一个调用:Base::operatornew(sizeof(Base),"Basein

c++ - 到处使用 std::size_t 是一种好习惯吗?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Whentousestd::size_t?我的代码中有很多常量是无符号数,例如计数器、截止频率、长度等。我开始对所有这些使用std::size_t,而不是int或unsignedint。这样做对吗?我启动它是因为STL容器将它用于它们的大小,它用于字符串位置等。

c++ - 使 size_t 和 wchar_t 可移植?

据我了解,size_t和wchar_t的表示完全是特定于平台/编译器的。例如,我读到Linux上的wchar_t现在通常是32位,但在Windows上是16位。有什么方法可以在我自己的代码中将它们标准化为一组大小(int、long等),同时仍然保持与两个平台上现有标准C库和函数的向后可比性?我的目标基本上是做一些类似typedef的事情,使它们成为固定大小。在不破坏某些东西的情况下这可能吗?我应该这样做吗?有没有更好的办法?更新:我想这样做的原因是我的字符串编码在Windows和Linux上都是一致的谢谢! 最佳答案 听起来您正在寻

c++ - 将 const 添加到 size_t 会导致编译失败是标准行为吗?

我最近读了一篇很酷的文章:https://akrzemi1.wordpress.com/2015/08/20/can-you-see-the-bug/在ideone上玩简化版时,我得到了令人惊讶的行为:#include#includeusingnamespacestd;intmain(){constsize_tsz=258;strings{sz,'#'};assert(2==s.size());}不编译,但是删除const的相同程序编译:#include#includeusingnamespacestd;intmain(){size_tsz=258;strings{sz,'#'};as

c++ - 虚拟功能 : Iterating over a vector<Base Class> that is populated with subclass objects

简短描述:我正在迭代一个vector,在vector中的每个对象上调用一个虚函数,以执行一系列操作。vector和迭代器一样属于基类。所有的对象都是child。当调用虚函数时,它会执行基类的函数。(真的)长描述:我正在尝试为具有一组行为的生物建模。我的基类是抽象的,只有两个函数(虚拟),所有子类都已覆盖:classBehavior{public:Behavior();~Behavior(void){}virtualvoidexecute(){}virtualBEHAVIOR_TYPEgetType(){returnm_Type;}protected:BEHAVIOR_TYPEm_Typ