草庐IT

标准图

全部标签

c# - 关于 catch block 中 catch 语句顺序的问题 - 特定于编译器或语言标准?

我目前正在使用VisualStudioExpressC++2008,并且对catchblock排序有一些疑问。不幸的是,我在互联网上找不到答案,所以我向专家提出这些问题。我注意到除非将catch(...)放在catchblock的末尾,否则编译将失败并出现错误C2311。例如,以下将编译:catch(MyException){}catch(...){}而以下不会:catch(...){}catch(MyException){}一个。请问这是在C++语言标准中定义的,还是微软编译器严格的问题?C#和Java也有相同的规则吗?顺便说一句,我还尝试制作一个基类和一个派生类,并将基类的catc

c++ - 在 gcc 中执行 C++98 标准

我有一份学校作业,应该用符合C++98的代码编写。我怎样才能强制g++只接受遵循这个标准的代码?-std=c++98可以解决这个问题还是我需要添加额外的标志? 最佳答案 根据GCC'sdocumentationonstandards:TheoriginalISOC++standardwaspublishedastheISOstandard(ISO/IEC14882:1998)andamendedbyaTechnicalCorrigendapublishedin2003(ISO/IEC14882:2003).Thesestandard

c++ - ABI 与 C++ 标准

我试图了解ABI(比如SystemV)和C++标准的区别。所以C++标准只是确定合法的C++,以便编译器可以将其转换为足够的汇编代码。ABI然后规范这个汇编代码如何与x86架构交互?这是两者之间更高层次的比较吗?我问的原因是对低延迟软件感兴趣,我想知道读取ABI会包含多少值(value)? 最佳答案 该标准根据您编写的代码定义程序应该做什么。ABI定义了特定平台的实现方式,以便在不同运行(可能由不同的编译器/版本)编译的代码可以交互。也就是说,当你写:voidf(inti){std::cout标准定义了行为:对该函数的调用将导致参数

c++ - 标准是否定义了 `a[i]` 的类型,其中 `a` 是 `T [M][N]`?

我偶尔会使用多维数组,并且很好奇标准(C11和/或C++11)关于使用比为数组声明的“维度”更少的“维度”进行索引的行为。给定:inta[2][2][2]={{{1,2},{3,4}},{{5,6},{7,8}}};标准是否说明了a[1]或a[0][1]是什么类型,是否合法,以及它是否应该正确索引子-数组如预期?auto&b=a[1];std::cout 最佳答案 m[1]只是int[2][2]类型。同样,m[0][1]就是int[2]。是的,作为子数组的索引按照您认为的方式工作。 关于

c++ - 如何将 double 转换为标准的 'long double'

如何按照C++标准将double转换为longdouble。我认为像这样转换不是正确的方法吗?doublevalue=1.2;longdoublenewValue=(longdouble)value; 最佳答案 这会很好地工作,但它不会神奇地在newValue中创建额外的精度。也就是说,它不会产生与以下相同的结果:longdoublenewValue=1.2L;这会将newValue设置为更接近1.2。 关于c++-如何将double转换为标准的'longdouble',我们在Stack

c++ - 线程安全标准 :list C++

我是多线程的新手,我正在尝试简单地使一些std:lists线程安全。每当将项目添加到列表或从列表中删除时执行mutex.lock()和mutex.unlock()就足够了吗?同样,我只是想让它们成为线程安全的。谢谢 最佳答案 为了安全起见,您必须保护对列表的所有访问。虽然在没有锁的情况下从列表中读取不会损坏列表,但如果在另一个线程正在读取列表时修改了列表,则任何一个线程都可能损坏(即崩溃或产生不正确的结果)。您必须对您希望内容稳定的整个代码范围保持锁定。如果另一个线程可以随时删除或重新排序任何元素,那么这包括您对其内容具有实时迭代器

c++ - 将手写循环转换为标准库调用

我最近看了SeanParent在2013年关于C++seasoning的演讲。如果我没有理解错的话,他说你可以从你的代码中消除几乎所有(所有?)手写循环。我的问题是如何实现这一目标?让我们考虑以下代码:classProgressDialog{//interestingpartofthatclassvoidSetPosition(intposition);boolIsCancelRequested();voidSetHeader(conststd::string&status);}voidfoo(conststd::vector&v){ProgressDialogdlg;longposi

c++ - C++ 中的 cout(标准输出)

//myfirstprograminC++#includeusingnamespacestd;intmain(){coutcout是一个对象吗?如果是这样,它在哪里实例化?(我没有看到类似“new....”的内容) 最佳答案 cout是在某处声明的全局对象。顺便说一句,与Java或C#不同,您不需要new来创建对象。例如,这将起作用:std::stringstr;//createsanewstd::stringobjectcalled"str" 关于c++-C++中的cout(标准输出)

c++ - 以标准输入作为文件名参数的 fopen

我被要求编写一个程序,基本上解析给它的文件,重定向标准输入,如下所示:myProgparam1param2param3我正在尝试使用fopen函数来打开给定的文件,但我不明白我应该在“constchar*文件名”参数中给它什么。 最佳答案 您不需要打开文件。您的程序有一个名为stdin的特殊值,它包含进程标准输入流的句柄。您可以像使用文件句柄一样使用它,例如:intc=fgetc(stdin);或:fread(somebuffer,somesize,1,stdin); 关于c++-以标准

c++ - 为什么 += 标准库中的有效临时对象?

当我尝试在ideone上编译以下内容时:classX{public:friendX&operator+=(X&x,constX&y);};X&operator+=(X&x,constX&y){returnx;}intmain(){X()+=X();}正如预期的那样,这会引发编译错误,因为您不能将临时值传递给非const引用。但是,以下编译成功ideone:std::string()+=std::string();这个错误不应该像我上面的例子那样吗?编辑:如果std::string()将+=定义为成员操作,当这种用法允许左侧是临时的时,为什么要这样做?为什么不像我上面那样定义它并避免提及