草庐IT

dynamic-sizing

全部标签

c++ - dynamic_cast vs static_cast 无效*

在下面程序的最后两行中,static_cast和dynamic_cast表现不同。据我了解,dynamic_cast的结果始终解析为完整对象的地址。所以它以某种方式使用了RTTI。谁能解释一下编译器如何使用RTTI来区分两者。#includeusingnamespacestd;classTop{protected:intx;public:Top(intn){x=n;}virtual~Top(){}friendostream&operator(&b)(&b);cout(p)(p)可能的输出:https://ideone.com/WoX5DI281,2,3,40xbfcce60410xbf

c++ - 是否有标准名称(模板或宏)来替换 ARRAY_SIZE、_countof 等?

我不是在谈论std::array或任何东西,只是经典的VanillaC/C++数组。我知道可以实现ARRAY_SIZE/_countof的各种方式,我只是想知道他们是否已经设法为此标准化了一个名称(在std::我假设)。如果没有,是否有相关建议? 最佳答案 当前的解决方法std::extent-数组的大小如果您正在使用native数组,您可以使用std::extent来自,用于生成数组的Nth维(默认为第一个)中的元素数。inta1[1024];inta2[std::extent::value];//int[1024]一点间接(通用

启动项目报错:The bean ‘XXXXMapper‘ could not be injected because it is a JDK dynamic proxy

Description:Thebean'studentMapper'couldnotbeinjectedbecauseitisaJDKdynamicproxyThebeanisoftype'com.sun.proxy.$Proxy250'andimplements:   com.xinwei.learning.mapper.StudentMapperExpectedabeanoftype'com.xinwei.learning.manager.education.mapper.TeachingClassStudentMapper'whichimplements:   com.xinwei.co

C++11 auto 和 size_type

鉴于auto的以下用法:std::vectorv;for(autoi=0;i对于C++来说,推导i将是理想的选择作为std::vector::size_type,但如果它只查看i的初始化程序,它会看到一个整数。i的推导类型是什么?在这种情况下?这是auto的适当用法吗?? 最佳答案 使用decltype而不是auto来声明i。for(decltype(v.size())i=0;i更好的是,如@MarkB的回答所示,使用迭代器迭代vector。 关于C++11auto和size_type,

c++ - 将 size() 用于 for 构造中的第二个表达式总是不好的吗?

在下面的示例中,我是否应该期望每次循环时都会调用values.size()?在这种情况下,引入一个临时的vectorSize变量可能是有意义的。或者现代编译器是否应该能够通过识别vector大小不能改变来优化调用。doublesumVector(conststd::vector&values){doublesum=0.0;for(size_tii=0;ii请注意,我不关心是否有更有效的方法来对vector的内容求和,这个问题只是关于在for结构中使用size()。 最佳答案 这是一种明确的方法-size()只被调用一次。for(si

c++ - 当编译器看不到可以完成转换的可能类型时,是否允许编译器优化 volatile 指针的 dynamic_cast?

看看这个小片段:structA{virtual~A(){}};structB{};boolfn(){A*volatilea=newA;returndynamic_cast(a);}是否允许编译器完全删除dynamic_cast,并将dynamic_cast转换为简单的nullptr;?这个问题的原因是这个answer.注意事项:假定volatile意味着编译器不能假定任何有关a的信息,因为它是易变的。这是一个question为什么。dynamic_cast可能不允许被删除的事实是程序中某处可能有一个类型,它派生自A和B。 最佳答案

c++ - size_t 参数新运算符

我有一点想不通新运算符重载。假设,我有一个类MyClass但MyClass.hMyClass.cpp和main.cpp文件是这样的;//MyClass.hclassMyClass{public://Somememberfunctionsvoid*operatornew(size_tsize);voidoperatordelete(void*ptr);//...};//MyClass.cppvoid*MyClass::operatornew(size_tsize){returnmalloc(size);}voidMyClass::operatordelete(void*ptr){free

c++ - 遍历 boost::dynamic_bitset

我有一个boostdynamic_bitset我正在尝试从中提取设置位:boost::dynamic_bitsetmyBitset(1000);我的第一个想法是对每个索引做一个简单的“转储”循环并询问它是否已设置:for(size_tindex=0;index但后来我看到了两个有趣的方法,find_first()和find_next()我认为肯定是为了这个目的:size_tindex=myBitset.find_first();while(index!=boost::dynamic_bitset::npos){/*dosomething*/index=myBitset.find_nex

c++ - 处理不相关类型的 Dynamic Cast

#includeusingnamespacestd;classX{public:virtualvoidf(){}};classY{public:virtualvoidg(){}};intmain(){X*x=newX();Y*y=dynamic_cast(x);//A//Y*y=static_cast(x);//BcoutA编译而B不编译。我明白为什么B没有被编译但是为什么A被编译虽然X和Y是完全不相关的类型? 最佳答案 这就是为什么dynamic_cast在不相关的类型之间被允许:classX{public:virtualvoid

c++ - std::string 实现是否符合 's.c_str() + s.size()' 不一定与 '&s[s.size()]' 相同?

§21.4.5[string.access]const_referenceoperator[](size_typepos)const;referenceoperator[](size_typepos);Returns:*(begin()+pos)ifpos.Otherwise,returnsareferencetoanobjectoftypecharTwithvaluecharT(),wheremodifyingtheobjectleadstoundefinedbehavior.至少对我来说,第二部分意味着这个“charT类型的对象”可能位于存储在std::string中的序列之外。目