我刚刚在Qt中find下面的代码,我有点困惑这里发生了什么。 特别是对于reinterpret_cast<T>(0)是什么? template <class T> inline T qobject_cast(const QObject *object) { // this will cause a compilation error if T is not const register T ptr = static_cast<T>(object); Q_UNUSED(ptr); #if !defined(QT_NO_MEMBER_TEMPLATES) && !defined(QT_NO_QOBJECT_CHECK) reinterpret_cast<T>(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast<T>(const_cast<QObject *>(object))); #endif return static_cast<T>(const_cast<QObject *>(reinterpret_cast<T>(0)->staticMetaObject.cast(const_cast<QObject *>(object)))); } 任何人都在意解释?
我在C / Objective-C / C ++中使用大括号括住了所有的switch case语句 直到不久之前,我还没有考虑是否包括break; 大括号内的说法是好的或不好的做法。 我怀疑这没关系,但我认为这仍然值得一提。 switch (foo) { case 1: { // stuff break; } default: { break; } } VS switch (foo) { case 1: { // stuff } break; default: { // stuff } break; }
我在VS 2008中有一个解决scheme,其中有两个项目。 一个是用C ++编写的DLL,另一个是从一个空白项目创build的一个简单的C ++控制台应用程序。 我想知道如何从应用程序中调用DLL中的函数。 假设我从一个空白的C ++项目开始,我想调用一个名为int IsolatedFunction(int someParam) 我怎样称呼它?
我使用gcc 4.4.1编译了我的C程序,但是当我尝试通过gdb版本7.0中的一个函数时,我得到以下消息: "Single stepping until exit from function _DictionaryTree_getNodeList, which has no line number information." 有人可以告诉我为什么发生这种情况?
我正在使用MVC v4。 我有一个'_BootstrapLayout'页面,它定义了所有的twitter引导等东西,定义站点布局的主页面,navbar等,以及从主页面inheritance的网站页面。 _BootstrapLayout.cshtml _MainPage.cshtml @ {Layout =“〜/ Views / Shared / _BootstrapLayout.cshtml”; } Index.cshtml @ {Layout =“〜/ Views / Shared / _MainPage.cshtml”;} 所以母版页 – >主页 – >网站页面 _BootstrapLayout页面包含脚本的渲染 @RenderSection("scripts", required: false) 我想添加一个脚本部分到Index.cshtml页面,但是当我做我得到exception @section scripts { <script type="text/javascript"> $(document).ready(function () { … }); </script> } 以下部分已被定义,但尚未渲染布局页面“〜/ Views / Shared / _MainPage.cshtml”:“scripts”。 所以我添加了一个空的@section脚本到_MainPage.cshtml,仍然是同样的问题? 即使我将代码添加到_MainPage脚本部分,我仍然得到相同的错误。 在_MainPage中放置@section的位置并不重要,仍然会出现相同的错误。 如果我故意不closures该部分(即,删除}),那么我得到一个错误,指出该部分是不正确的,所以它parsing_MainPage中的部分。 […]
使用string插值之间有一个明显的性能差异: myString += $"{x:x2}"; vs String.Format()? myString += String.Format("{0:x2}", x); 我只是问,因为Resharper提示修复,我以前被骗过。
我想这是一个简单的问题,但我得到一些奇怪的结果与我目前的代码,我没有math背景,以充分理解为什么。 我的目标很简单,正如标题所说:我只想从中心点以一定的距离和angular度find点。 我目前的代码: Point centerPoint = new Point ( 0, 0 ); Point result = new Point ( 0, 0 ); double angle = 0.5; //between 0 and 2 * PI, angle is in radians int distance = 1000; result.Y = centerPoint.Y + (int)Math.Round( distance * Math.Sin( angle ) ); result.X = centerPoint.X + (int)Math.Round( […]
我想知道是否可以通过初始化列表来初始化元组(更确切地说 – initializer_lists的initializer_list)? 考虑元组的定义: typedef std::tuple< std::array<short, 3>, std::array<float, 2>, std::array<unsigned char, 4>, std::array<unsigned char, 4> > vertex; 有没有办法做到以下几点: static vertex const nullvertex = { {{0, 0, 0}}, {{0.0, 0.0}}, {{0, 0, 0, 0}}, {{0, 0, 0, 0}} }; 我只是想实现相同的function,我使用结构,而不是元组(因此只有数组initialize_list初始化): static struct vertex { std::array<short, 3> m_vertex_coords; std::array<float, 2> m_texture_coords; std::array<unsigned char, 4> m_color_1; std::array<unsigned […]
容器需求已经从C ++ 03改为C ++ 11。 虽然C ++ 03具有一揽子要求(例如,向量的复制可构造性和可分配性),但是C ++ 11在每个容器操作(第23.2节)上定义了细粒度的要求。 因此,只要你只执行某些不需要赋值的操作,就可以将一个可复制但不能赋值的types(比如带有const成员的结构)存储在一个向量中(构造和push_back就是这样的操作; insert不)。 我想知道的是:这是否意味着标准现在允许vector<const T> ? 我没有看到任何理由不应该 – const T ,就像一个具有const成员的结构,是一个复制可构造但不可转让的types – 但我可能错过了一些东西。 (使我想我可能错过了一些东西的部分原因是,如果尝试实例化vector<const T> ,gcc trunk将崩溃并烧毁,但对于T有const成员的vector<T>则没有问题。
我目前正在尝试使用stl-datastructures。 但是,我仍然不确定何时使用哪一个,何时使用某个组合。 目前我想弄清楚,当使用std::multimap确实有道理。 就我所见,通过组合std::map和std::vector ,可以轻松地构build自己的multimap实现。 所以我留下了这些数据结构应该被使用的问题。 简单性:std :: multimap使用起来更简单,因为不需要处理额外的嵌套。 但是,作为批量元素访问一系列元素可能需要将数据从迭代器复制到另一个数据结构(例如std::vector )。 速度:vector的局部性最有可能使迭代在相等元素的范围上更快,因为caching使用被优化。 不过,我猜测, std::multimaps也有很多优化技巧背后,尽可能快地迭代相同的元素。 同样,正确的元素范围可能会被优化为std::multimaps 。 为了尝试速度问题,我使用下面的程序做了一些简单的比较: #include <stdint.h> #include <iostream> #include <map> #include <vector> #include <utility> typedef std::map<uint32_t, std::vector<uint64_t> > my_mumap_t; const uint32_t num_partitions = 100000; const size_t num_elements = 500000; int main() { srand( 1337 ); std::vector<std::pair<uint32_t,uint64_t>> values; for( size_t i = 0; […]