草庐IT

dynamic-arrays

全部标签

c++ - 为什么这个来自Objective-C++的dynamic_cast调试成功但发布失败?

我在最新版本的Xcode(撰写本文时为9.4.1)中构建了一个C++框架,我再次在Xcode中从Objective-C++代码中使用它。我需要执行从一种指针类型到另一种指针类型的dynamic_cast。但是,dynamic_cast仅适用于调试版本,不适用于发布版本。关于dynamic_cast在Objective-C++中的工作方式,我是否缺少或理解导致此示例失败的某些内容?C++框架TestClass.hppclassParent{public://https://stackoverflow.com/a/8470002/3938401//musthaveatleast1virtu

c++ - 在 C++ 中是否允许从括号值列表中赋值 std::array?

在c++primer(第5版)中,提到不允许从花括号值列表赋值std::array。Becausethesizeoftheright-handoperandmightdifferfromthesizeoftheleft-handoperand,thearraytypedoesnotsupportassignanditdoesnotallowassignmentfromabracedlistofvalues.下面的代码作为例子给出。std::arraya1={0,1,2,3,4,5,6,7,8,9};std::arraya2={0};//elementsallhavevalue0a1=a

c++ - 取一个数组引用 `T(&)[n]` 到一个 `std::array<T, n>` 的内容

假设我有一个std::array并希望获取对其内容的数组引用(即未公开的elems数组成员)。我很惊讶地发现std::array::data()返回T*而不是T(&)[n],所以似乎有必要进行某种类型转换。我可以写:std::arrayarr;int(&ref)[5]=*reinterpret_cast(arr.data());但是,这看起来很丑陋并且可能不安全。它是合法的(定义明确的)代码吗?是否有更好的方法来做到这一点? 最佳答案 该标准没有提供array的底层实现,但是如果它使用int[5]作为底层表示,那么对于该实现,只有您

c# - 与 COM 中的 QueryInterface 或 C++ 中的 dynamic_cast 相比, "as"的成本是多少?

我仍在尝试将我深厚的旧知识从C/C++映射到我较浅的.Net知识。今天是时候在C#中使用“as”(隐含地“is”和cast)了。我对“as”的心理模型是,它是一个QueryInterface或dynamic_cast(一个带有指针参数的dynamic_cast,而不是引用,也就是说)对于C#。我的问题有两个方面:我的比较公平吗?与QueryInterface或dynamic_cast相比,“as”的相对成本是多少? 最佳答案 是的,比较是公平的,尤其是在处理指针时。这三个中的每一个要么成功并返回目标类型的非空指针,要么返回null。

c++ - 使用 std::shared_ptr<std::vector> 而不是 boost::shared_array 有意义吗?

现在我正在重写部分代码以使用C++11标准。在某些地方我发现了以下代码:boost::shared_arrayarray;是否可以将其替换为:std::shared_ptr>array;我正在尝试在我的代码中替换C++11中已经存在的所有boost功能。我需要澄清一点。实际上我需要一个原始数组(但有引用计数,所以它可以自动删除),不需要所有那些vector特征。所以boost::shared_array解决了我想要的问题,没有任何额外的成本。但我试图让我的代码尽可能多地使用新标准(尽管新标准仍未涵盖来自boost的许多库)。谢谢。 最佳答案

c++ - boost::variant for boost::arrays of arbitrary size

我想本着的spirit创建一个boost::varianttypedefboost::variant,boost::array,boost::array,...>any_int_array;泛化为N作为模板的第二个值。换句话说,一个包含任意大小数组的boost::variant。这可能吗?请注意,在上面的示例中,boost::array是我的案例之一,但对于采用单个int的任何类,它都需要是一个可行的解决方案值作为模板参数。 最佳答案 既然你在谈论具有静态已知容量的类型,你就不能用一些模板元编程来解决这个问题吗?LiveonColi

c++ - 为什么 std::stoi 和 std::array 不能用 g++ c++11 编译?

过去几个月我一直在学习C++和使用终端。我的代码使用g++和C++11编译和运行良好,但在过去的几天里它开始出错,从那以后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C++标准。我首先得到的错误与头文件中的#include有关。不知道为什么会这样,但我通过使用boost/array来绕过它。我无法解决的另一个错误是std::stoi。array和stoi都应该在C++11标准库中。我编写了以下简单代码来演示发生了什么:////stoi_test.cpp////Createdbyecg//#include#include//stoishouldbeinhereintmain

c++ - 编译器在初始化大型 std::arrays 时挂起

我需要初始化一个非常大的多维std::array数据:classThing;classWorld{public:World():space{nullptr}{};~World()=default;private:staticunsignedintconstsize=1000;std::array,size>,size>,size>space;};如果您尝试实例化它,G++4.8.2会阻塞:它会消耗所有可用内存并且不会返回。也就是说,编译器挂起,我从来没有得到可执行文件。这是为什么?请注意,clang++没有问题。注意:我完全意识到将这么多数据放在堆栈上可能会溢出。在堆上初始化它的最佳方

c++ - dynamic_cast 真的适用于多重继承吗?

我想看看是否可以创建“接口(interface)”,继承它们,然后在运行时检查是否有任何随机类实现了该接口(interface)。这是我的:structGameObject{intx,y;std::stringname;virtualvoidblah(){};};structAirholder{intoxygen;intnitrogen;};structTurf:publicGameObject,publicAirholder{Turf():GameObject(){name="Turf";}voidblah(){};};voidremove_air(GameObject*o){Air

c++ - 编译器错误? g++ 允许可变大小的静态数组,除非函数是模板化的

下面的代码演示了我无法解释的gcc4.6.2行为。第一个函数声明一个vec_t类型的静态数组,其中vec_t是unsignedchar的typedef别名。第二个函数是相同的,除了vect_t的类型是一个模板参数。第二个函数无法编译并出现诊断“错误:‘bitVec’的存储大小不是常量”。#includevoidbitvec_func(){conststd::size_tnbits=1e7;typedefunsignedcharvec_t;conststd::size_tWLEN=std::numeric_limits::digits;conststd::size_tVSIZ=nbits