草庐IT

c++ - 如何在没有未定义行为的情况下进行双 block 添加?

编辑公共(public)健康警告-这个问题包含关于未定义行为的错误假设。查看已接受的答案。看完之后recentblogpost,我一直在思考在C和C++代码中避免所有标准未定义假设的实用性。这是从C++中截取的片段,用于执行无符号的128位加法...voidc_UInt64_Pair::operator+=(constc_UInt64_Pair&p){m_Low+=p.m_Low;m_High+=p.m_High;if(m_Low这显然依赖于关于溢出行为的假设。显然,大多数机器都可以支持正确类型的二进制整数(尽管可能是从32位block或其他任何东西构建的),但显然优化器可能会在这里利

c++ - 函数 try block 的目的是什么?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Whenisafunctiontryblockuseful?Differencebetweentry-catchsyntaxforfunction这段代码在UseResources类中构造Dog对象时抛出一个int异常。int异常被普通的try-catchblock捕获,代码输出:Cat()Dog()~Cat()Insidehandler#includeusingnamespacestd;classCat{public:Cat(){cout现在,如果我们将UseResources()构造函数的定义替换为使用f

c++ - 为什么在另一个案例中允许在 block 内使用 case 语句?

这个问题在这里已经有了答案:Embeddingacaselabelinanif...elsestatement(2个答案)关闭5年前。我遇到过如下代码:switch(i){case2:{std::cout请注意,case2打开一个带有花括号的block,该block仅在case3之后关闭。起初,这似乎是一个会导致编译器错误的拼写错误,或者更糟的是,会忽略case3。但它在c++中工作得很好,如果我是3,则输出3。我来自java背景,所以我可能缺乏对c++中逻辑block的理解。所以我的问题是:这是故意的行为吗?

c++ - 功能尝试 block 。一个有趣的例子

考虑以下C++程序structstr{intmem;str()try:mem(0){throw0;}catch(...){}};intmain(){strinst;}catchblock起作用,即控件到达它,然后程序崩溃。我不明白它有什么问题。 最佳答案 一旦控制到达构造函数的function-try-block的catchblock的末尾,异常就会自动重新抛出。由于您没有在main()中进一步捕获它,因此调用了terminate()。这是一个有趣的阅读:http://www.drdobbs.com/184401316

c++ - block 评论的三个正斜杠?

首先在Notepad++中注意到这一点,其中//注释和///注释以不同的颜色显示。Doxygen透露了更多相关信息,但我不相信它的功效。既然键入/*和*/更容易,为什么有人会使用三斜杠注释样式?(我认为在嵌套评论时必须有更好的解释)为了使其可用,编辑器是否支持三重斜线的block注释,就像VisualStudio支持Ctrl+kCtrl+c多行注释一样? 最佳答案 在VisualStudio中,///表示documentation不只是评论。按照您的链接,解释是相同的。它用于装饰注释,这些注释将通过您的编辑器或某些其他工具专门格式化

java - catch block 在 C++ native 库中不起作用

我正在用C++编写一个Javanative库,并在native库本身中使用异常处理,但是一旦我抛出异常,库就会崩溃。这是我的简单测试程序,当我从Java测试中调用它时,它会在抛出异常时立即崩溃。catchblock不工作。任何想法我错过了什么。谢谢。#include"Test.h"#includeJNIEXPORTvoidJNICALLJava_Test_helloWorld(JNIEnv*,jobject){std::cout编译和链接:g++-m64-fPIC-fexceptions-ctest.cppg++-shared-m64-Wl,-soname,libtest.so-Wl,

c++ - 在两个 ASM GCC 内联 block 之间传播进位

尊敬的程序集/C++开发人员,Thequestionis:Doespropagatethecarry(oranyflag)betweentwoASMblockisrealisticortotallyinsane,evenifitworks?几年前,我为低于512位(编译时)的大型算术开发了一个整数库。我此时没有使用GMP,因为对于这种规模,由于内存分配和二进制表示的模型选择,GMP变慢了bench.我必须承认我使用BOOST_PP创建了我的ASM(字符串block),它不是很出色(如果好奇请看一下vli)。图书馆运作良好。但是我注意到此时不可能在两个ASM内联block之间传播状态寄存

c++ - 如果我尝试在 C++ 中的 catch block 中抛出一些东西,为什么会导致终止

我有以下C++代码,它给了我一个惊喜。问题是,如果我在catchblock中抛出除了重新抛出之外的东西,程序将通过调用abort终止并在GCC4中给出错误消息,“在抛出'int'实例后调用终止”。如果我只使用“抛出;”重新扔进catchblock,一切都会好起来的。#include#include#includeusingnamespacestd;intmain(){try{throwstd::string("firstthrow");}catch(std::string&x){try{std::cout 最佳答案 如果你抛出一个i

c++ - 如何在一个 catch block 中捕获所有类型的异常?

在C++中,我尝试一次捕获所有类型的异常(如C#中的catch(Exception))。它是如何完成的?更重要的是,如何捕捉被零除异常? 最佳答案 catch(...){//Handleexceptionsnotcovered.}重要注意事项:更好的方法是捕获您实际上可以从中恢复的特定类型的异常,而不是捕获所有可能的异常。catch(...)还将捕获某些严重的系统级异常(因编译器而异),您将无法从中可靠地恢复。以这种方式捕获它们然后吞下它们并继续可能会导致您的程序出现进一步的严重问题。根据您的上下文,可以接受使用catch(...)

c++ - c或c++中的静态 block 是什么?

这个问题在这里已经有了答案:What'stheC++idiomequivalenttotheJavastaticblock?(7个答案)关闭3年前。我想知道什么是C或C++中的静态block并举例说明?我知道什么是静态,但静态和静态block之间有什么区别?