草庐IT

cpp_exceptions_handling

全部标签

C++ 性能、优化编译器、.cpp 中的空函数

我有一个非常基本的类,将其命名为Basic,用于一个更大项目中的几乎所有其他文件。在某些情况下,需要有调试输出,但在Release模式下,这不应该启用并且是一个NOOP。目前在标题中有一个定义,它根据设置打开或关闭宏。因此,当关闭时,这绝对是一个NOOP。我想知道,如果我有以下代码,编译器(MSVS/gcc)是否能够优化函数调用,那么它又是一个NOOP。(通过这样做,开关可以在.cpp中,并且开关会更快,编译/链接时间明智)。--Header--voidprintDebug(constBasic*p);classBasic{Basic(){simpleSetupCode;//thiss

c++ - 为什么这段代码会出现 "exception spec is more lax than base"错误?

尝试使用Xcode6.1中的clang版本(基于LLVM3.5svn的clang-600.0.54)编译以下代码,使用-std=c++11和-stdlib=libc++给我一些我不太明白的错误。#includestructImpl{typedefstd::functionL;Ll;inti;};structHndl{Impl*impl;Hndl(Impl*i):impl(i){}~Hndl()noexcept(false){}};intmain(intargc,char*argv[]){Hndlh(newImpl());h.impl->l=[=]{h.impl->i=42;};retu

c++ - 在代码中使用 Style 自定义 Qt slider 时, handle 偏离凹槽

在mostexamples,自定义Qtslider是这样完成的(使用样式表):mySlider=newQSlider(centralWidget);mySlider->setObjectName(QStringLiteral("mySlider"));mySlider->setGeometry(QRect(645,678,110,21));mySlider->setOrientation(Qt::Horizontal);mySlider->setStyleSheet("QSlider::groove:horizontal{background-image:url(:/main/grap

c++ - 为什么不对类使用 cpp 文件包含?

这个问题并不是要重复“WhyshouldInotincludecppfilesandinsteaduseaheader?”,而是一个实践问题。为了最好地阐述这个问题,让我来解释一下。当编写一个类时,它可以快速增长到超过几百行甚至更多。出于可读性目的,我想在每个方法的基础上将一个类分解成单独的文件。需要明确的是,出于上面列出的帖子中提到的原因,我并不是建议将整个项目变成一组包含,而是将一个类分解为包含在它们自己的文件中的组件。下面的代码片段说明了我的意思main.cpp#include#include"helloClass.h"usingnamespacestd;intmain(){he

c++ - 在模板类的头文件中包含 .cpp 文件

我知道模板类的定义和实现应该在同一个头文件中。但我在学校的教育有所不同。我将在头文件中包含模板类的定义,并在头文件的末尾执行#include"MyFile.cpp",其中包含模板类的实现。这是糟糕的编程习惯吗? 最佳答案 "Isthisbadprogrammingpractice?"一般不会,这是一种非常常见的技术。但问题是.cpp文件扩展名,这会影响许多IDE和构建系统将其视为常规源文件。比较常用的扩展名是.tcc、.tpc。 关于c++-在模板类的头文件中包含.cpp文件,我们在St

c++ - 如何在cpp中定义volatile元素的map

我想生成一个互斥元素的映射,它可能需要是可变的。我正在尝试定义此类内容:typedefstd::maptMutexMap;tMutexMapmyMutexMap;然后使用简单的map索引,例如:myMutexMap[10]=0;myMutexMap[23]=1;我正在使用gcc4.1.2。gcc编译器不喜欢该代码。我得到一个错误nomatchingfunctionforcallto'std::pair....'"我做错了什么? 最佳答案 C/C++的volatile不像volatile在某些托管语言中与互斥量无关(参见http://

c++ - cmake:读取并编译动态生成的 cpp 文件列表

我有一个自定义工具,可以处理给定的IDL文件列表并生成许多.cpp和.h文件作为输出。我想将这些文件添加到我的CMakeLists中要编译的事物列表中,并模拟这些文件对IDL的依赖性。为简单起见,我将声明对任何IDL文件的任何更改都应触发所有cpp/h的重新生成。我有一个自定义命令负责运行生成器工具并将所有IDL文件列为依赖项。我的问题是在构建时将后续的cpp/h文件列表放入cmake。无法从IDL文件的名称推断出将生成哪些cpp文件。但是,我的生成器工具会将生成的文件列表输出到文本文件。所以我的问题是:我如何指示cmake“从这个文本文件中读取并将内容添加为要编译的额外源文件和头文件

c++ - 使用 QT5_ADD_RESOURCES 和使用 CMake 进行多线程编译时损坏的资源 .cpp 文件

Qt5.0版本带来了一组更简单的命令来使用CMake构建Qt项目。参见http://qt-project.org/doc/qt-5/cmake-manual.html.需要使用命令QT5_ADD_RESOURCES包含项目的资源。如果我的资源文件名为Icon32.qrc,QT5_ADD_RESOURCES(RESOURCESIcon32.qrc)命令会自动将其转换为qrc_Icon32.cpp文件并定义一个${RESOURCES}变量,然后我可以将其包含到适当的目标中。这样做很完美,除了我在CDash中大约每20个构建出现一次编译错误。错误通常采用以下形式:/.../CMake/bui

c++ - 我可以修改 std::exception_ptr 中异常的值吗?

如果我在std::exception_ptr中存储了一个异常。我使用std::rethrow_exception重新抛出异常,使用catch(MyException&)访问它,然后修改值。如果我再次抛出相同的异常,我是否应该观察我所做的修改?下面的代码展示了我的想法:#include#includestructMyException{intvalue;};intmain(){std::exception_ptra=std::make_exception_ptr(MyException());try{std::rethrow_exception(a);}catch(MyException

c++ - Bazel 和自动生成的 cpp/hpp 文件

我开始使用Bazel作为我的C++项目构建系统。但是我遇到了以下问题:我在一个自动生成file.hppfile.cpp(文学编程)的场景中。要重现我的问题,可以简单地使用这个最小的生成器:--file.sh--#!/bin/shecho"intfoo();">>file.hppecho"#include\"myLib/file.hpp\"\n\nintfoo(){return2017;}">>file.cpp我的项目仓库是:(WORKSPACE是一个空文件)├──myLib│  ├──BUILD│  └──file.sh└──WORKSPACE构建文件是genrule(name="ta