相关疑难解决方法(0)

std :: reference_wrapper和简单指针之间的区别?

为什么需要std::reference_wrapper?应该在哪里使用?它与简单的指针有什么不同?它的性能与简单的指针相比如何?

c++ pointers reference c++11 reference-wrapper

83
推荐指数
4
解决办法
3万
查看次数

是否有没有未定义行为的安全版本的 C++?

C++ 中的未定义行为真的很难调试。是否有一个版本的 C++ 和标准库不包含任何未定义的行为而是抛出异常?我知道这将是一个性能杀手,但我只打算在我在调试模式下编程、调试和编译时使用这个版本,并不真正关心性能。理想情况下,此版本是可移植的,您可以轻松打开/关闭未定义的行为检查。

例如,你可以实现一个像这样的安全指针类(只检查空指针,实际上如果它指向一个有效的内存块,则不会):

template <typename T>
class MySafePointer {
     T* value;
public:
      auto operator-> () {
          #ifndef DEBUG_MODE
          assert(value && "Trying to dereference a null pointer");          
          #endif
          return value;
      }
      /* Other Stuff*/

};
Run Code Online (Sandbox Code Playgroud)

在这里,用户只需要#undef DEBUG_MODE在您想恢复性能时才需要。

是否有 C++ 的库/安全版本可以做到这一点?

编辑:更改了上面的代码,使其实际上更有意义并且不会抛出异常但断言值非空。问题只是一个描述性错误消息与崩溃的问题......

c++ undefined-behavior

3
推荐指数
2
解决办法
192
查看次数