jjzjj

standards

全部标签

C++ 标准 - 如何处理 "array of unknown bound of T"

我对这段代码的工作感到困惑:structS{charc[];};Ss;根据C++标准,第8.3.4章:"Iftheconstantexpressionisomitted,thetypeoftheidentifierofDis“derived-declarator-type-listarrayofunknownboundofT”,anincompleteobjecttype."但我无法弄清楚“不完整的对象类型”是如何变得完整的。感谢您的帮助! 最佳答案 您说过您发布的代码将在VS10中编译。关闭语言扩展,然后就不会了。项目>属性>C/

c++ - 来自 exception::what() 的异常描述是否标准化为标准异常?

对于像std::bad_alloc这样的标准化异常,exception::what()返回的字符串在不同的编译器中是否应该相同?例如,我使用过的几个编译器都会为bad_alloc::what()返回badallocation。是否有某种原因没有返回更具描述性的字符串,例如Memoryallocationfailure? 最佳答案 Isthestringreturnedbyexception::what()expectedtobethesameacrosscompilers?不,这不是标准化的。以你的bad_alloc为例:[C++1

c++ - 为什么我无法阻止不受欢迎的 C 风格强制转换进行编译?

有一个我无法阻止编译的不良C风格转换。不受欢迎的强制转换执行C风格的强制转换,从某个类的对象到某个其他类的非常量引用。这些类(class)是无关的。同时,我喜欢支持从同一类的对象到const引用的C风格转换。我正在提供一个公共(public)转换运算符来支持理想的转换。在这种情况下,似乎无法阻止不受欢迎的转换。转换为非常量引用无法构建(“Sandbox::B::operatorSandbox::A&()”(在第30行声明)不可访问*),不幸的是转换为const引用要么失败(错误:不止一个从“Sandbox::B”到“constSandbox::A”的转换函数适用:函数“沙盒::B::o

c++ - 如何在默认模板参数中引用自身类型?

我们有一个reference_counted模板和一个默认的default_deallocator类如下:templateclassdefault_deallocator{voidoperator()(T*obj){deleteobj;}};templateclassreference_counted:T{public:voidretain(){ref_count++;}voidrelease(){ref_count--;if(ref_count==0){deletethis;}}}我们想为reference_counted类添加释放器。但是我们不知道如何编写默认模板参数,因为编译器会

c++ - "STL"和 "C++ Standard Library"之间是否有清晰的分隔定义?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:What'sthisSTLvs.“C++StandardLibrary”fightallabout?我非常习惯STL(“标准模板库”)这个术语,当我真正指的是C++标准库时,我发现自己经常使用它。因此,由于如今C++(-11)标准库中的几乎所有内容都是模板,我想知道:在C++标准库中是否定义了什么是STL,什么不是?也许是容器、流、算法等?或者我应该停止使用术语“STL”,因为它是SGI(对吗?)多年前用于其lib的历史性术语?这将是困难的...

c++ - 如何仅使用 boost/standard 库在 C++ 中读/写图像?

这可能吗?图像的格式无关紧要,但我必须能够打开它,将像素数据读入某种数组,使用修改后的像素数据集创建新图像。谢谢! 最佳答案 Boost.GIL有好的videotutorial它向您展示了如何以非常通用但高效的方式读取/写入和处理原始图像数据。 关于c++-如何仅使用boost/standard库在C++中读/写图像?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9761910

c++ - 转换 int -> unsigned long long 是否由标准定义

我无法在标准中找到关于如何将int值转换为unsignedlonglong的确切规范。指定了各种类似的转换,如int->unsigned、unsigned->int(UBifnegative)、unsignedlonglong->int等例如GCC,-1被转换为0xffffffffffffffff,而不是0x00000000ffffffff。我可以依赖这种行为吗? 最佳答案 是的,这个定义很明确,它基本上是将maxunsignedlonglong+1添加到-1,它始终是maxunsignedlonglong。这包含在draftC++

c++ - 类方法声明符中 noexcept 的行为

以下代码的预期行为是什么?使用GCC时输出为0,而使用clang时输出为1。哪一个是正确的?#includestaticconstboolne=false;structa{a()noexcept(ne){}staticconstboolne=true;};intmain(){std::cout 最佳答案 他们都是对的!这只是格式错误的代码。来自[basic.class.scope]:AnameNusedinaclassSshallrefertothesamedeclarationinitscontextandwhenre-evalu

c++ - 是否有像 PSR-1/2 这样的 C++ 编码标准

我正在寻找C++编码标准。我发现了很多标准:谷歌C++风格指南高完整性C++编码标准4.0版...是否有每个C++开发人员都遵循的C++编码标准,如PSR-1/21?1)PHP标准推荐。PSR-1:基本编码标准。PSR-2:编码风格指南。 最佳答案 IsthereanyC++codingstandardlikePSR-1/2thateveryC++developerfollows?C++语言标准由ISOC++Committee正式制定.该标准带有(大部分)向后兼容的迭代和版本控制(如c++-11、c++-14、c++-17)。这实际

c++ - 删除结束迭代器是对标准的疏忽还是设计决策?

标准库容器允许我们删除由迭代器first和last表示的范围。std::vectorbar;//firstitlastitbar.erase(bar.begin(),bar.end());标准规定first迭代器必须有效并且可解引用,而last只需要有效。但是,如果first==last则first不需要取消引用,因为erase是空操作。这意味着以下内容是合法的:bar.erase(bar.end(),bar.end());但是,如果我只想删除一个元素而不是一个范围,则迭代器必须是有效的并且可解引用,从而导致以下未定义的行为:bar.erase(bar.end());为什么这不只是空操