草庐IT

bad_cast

全部标签

objective-c - EXC_BAD_ACCESS 消息发送到已释放的实例,但我使用的是 ARC?

我有一个从SOAPWeb服务获取信息的应用程序,我想在UITableView中显示结果。我有这个应用程序的早期版本,我正在创建一个新版本,以基本上清理并摆脱一堆已弃用且不再使用的遗留代码。在以前的版本中,这运行良好。在新版本中,没有那么多。基本上,当前方案返回3个字符串,我试图将它们用作UITableView中数据的基础。我正在努力解决这个问题,因为很难找到EXC_BAD_ACCESS错误!(顺便说一句,如果有人有办法让调试体验更像VisualStudio,我很想听听!不知道是哪一行导致了错误,而且无法在崩溃时查看我的局部变量,看看是什么。我已经在异常断点中添加了,但这似乎没有多大作用

c++ - 为什么 C++ 编译器不从最终类优化这个 dynamic_cast?

考虑这个类层次结构:structAnimal{virtual~Animal();};structCat:virtualAnimal{};structDogfinal:virtualAnimal{};我的理解是,将final放在classDog上可以确保没有人可以创建继承自Dog的类,这必然意味着没有人可以同时创建一个IS-ADog和IS-ACat的类。考虑这两个dynamic_cast:Dog*to_final(Cat*c){returndynamic_cast(c);}Cat*from_final(Dog*d){returndynamic_cast(d);}GCC、ICC和MSVC忽

c++ - 为什么这个专门用于 basic_ifstream 模板的 char_traits<uint8_t> 和 codecvt<uint8_t> 会抛出 std::bad_cast?

Therearealreadyquestions在Stackoverflow上询问为什么basic_fstream不起作用。答案说char_traits仅专门用于char和wchar_t(加上char16_t,char32_t在C++11中)你应该坚持使用basic_fstream读取二进制数据并根据需要进行转换。该死的,这还不够好!:)没有一个答案(我能找到)说如何特化char_traits并将其与basic_fstream一起使用模板,或者如果它甚至可能的话。所以我想我会尝试自己实现它。在Windows764位上使用VisualStudioExpress2013RC和在Kubunt

c++ - C++ 中 dynamic_cast 的真实示例

谁能给我一个真实世界的例子,说明需要dynamic_cast并且根本无法解决的情况?我能想到的示例通常可以通过双重调度来解决。如果约束太强,通常采用dynamic_cast的示例也是不错的选择。我希望看到真实的例子,而不是“它通常用于在类型树上下类型之间进行转换”。 最佳答案 双重分派(dispatch)要求正在交互的类型对彼此的内部有深入的了解,因为它要求一个类调用另一个类的方法。dynamic_cast适用于您无法修改类的内部结构或不希望破坏相关类的封装。也就是说,双重调度对所涉及的类具有侵入性,而dynamic_cast在不知

c++ - 将 const_cast 元素移出 std::initializer_list 是否有风险?

这个问题建立在@FredOverflow'squestion.CLARIFICATION:initializer_listapproachisrequiredastheVC++2012hasabugthepreventsforwardedexpansionofnamespacedarguments._MSC_VERhasthebug.我编写了一个可变参数模板函数,它可以折叠类型化容器中的任意数量的参数。我使用类型的构造函数将可变参数转换为可使用的值。例如。_variant_t:)我的MySql需要这个一次性将参数推送到准备好的语句时的C++库,而我的MySqlVariant将输入数据转

c++ - 实现信号(观察者模式): is mutable or const_cast necessary?

我正在实现我自己的signal/slot(观察者模式,Qt风格)机制,所以我可以有一个property来通知......东西......那是改变了。我认为C++11提供了使非常简洁和功能强大的实现成为可能所需的一切。我遇到的“问题”是如果我想“连接”到const对象的信号,我需要signal::connect函数是const,但修改回调/观察者列表。有两种直接的方法可以解决此问题:const_castconnect内的列表。使列表可变。在我看来,两者都是一样的(在thisquestion中,e.g.之前有人问过这个问题),并且在逻辑上非常好,但在风格上是有问题的。因此问题。有没有办法解

c++ - 使用 reinterpret_cast 的签名别名

取下面的代码#includevoidfunc(){inti=2147483640;while(i这段代码显然是错误的,因为只有当签名的inti溢出(即UB)时,while循环才能终止,因此编译器可能会例如将其优化为无限循环(Clang在-O3)上执行,或执行其他类型的时髦的事情。我现在的问题是:根据我对C++标准的阅读,与签名ma​​y别名等效的类型(即指针int*和unsigned*可以别名)。为了做一些时髦的签名“包装”,以下是否有未定义的行为?#includestaticintsafe_inc(inta){++reinterpret_cast(a);returna;}voidfu

c++ - static_cast<T>(...) 是编译时还是运行时?

是static_cast(...)在编译时或运行时完成的事情?我用谷歌搜索,但我得到了不同的答案。另外,dynamic_cast(...)显然是运行时——但是reinterpret_cast(...)呢?? 最佳答案 取决于您要转换的内容。例如。static_cast("Hello")最终调用std::string构造函数。在我的脑海中,我想不出任何reinterpret_cast的情况需要生成实际的机器指令。它只是告诉编译器:采用这种位模式,并相信它是这种类型的值。 关于c++-sta

c++ - 为什么我要使用 dynamic_cast 强制转换为 void *?

所以我正在阅读dynamic_castfrom"void*"的答案尽管您不能从void*转换为T*一些响应指出可以转换T*到void*,但不要给出任何指示为什么你想这样做。这只是可能的琐事,还是有可能有意义的情况?我考虑过可能是为了可读性或明确我们正在转换为void*,但考虑到dynamic_cast的目的,它不太适合我。就此而言,除了让T*隐式变为void*之外,还有什么理由去做吗?我已经看到不时使用C风格强制转换为void*code>指向一个指针或其他东西)。 最佳答案 首先,使用dynamic_cast(x)时你会得到一个指向

c++ - 为什么 new[-1] 会产生 segfault,而 new[-2] 会抛出 bad_alloc?

我尝试通过将一些否定参数传递给new[]来测试bad_alloc异常。当传递小的负数时,我得到了我所希望的-bad_alloc。但是,当传递-1时,我可以看到我的对象被构​​造了数千次(我在构造函数中打印静态计数器)并且应用程序因段错误而终止。new[]将有符号整数转换为size_t,所以-1是size_t和-2是最大值-1以此类推。那么为什么new[]在接收到一个巨大的数字时会抛出异常,但在接收到size_t的最大值时会尝试分配呢?new[]的1111...1和1111...0有什么区别?:)提前致谢! 最佳答案 这是我的猜测:在