草庐IT

Non-blocking

全部标签

c++ - 如何解决模板参数推导中的 const/non-const 冲突

我有一个接受std::pair的函数模板以及其中一种类型的值。我想使用来自std::map的条目调用此函数作为对参数。#include#includetemplatevoiddo_stuff(std::pairconst&pair,T1const&val){//Imaginethatthisdoessomethingimportant...}intmain(){std::mapfoo{{0,0.0}};do_stuff(*foo.begin(),0);}编译失败,因为map条目的类型是std::pair,所以T1的类型推导有冲突的类型:constint通过pair参数,和int通过va

c++ - 使用 std::string 在 switch-case block 中返回字符串常量

注意:这不是关于使用字符串来选择switch-caseblock中的执行路径。C++中的一个常见模式是使用switch-caseblock将整数常量转换为字符串。这看起来像:charconst*to_string(codescode){switch(code){casecodes::foo:return"foo";casecodes::bar:return"bar";}}但是,我们是在C++中,所以使用std::string更合适:std::stringto_string(codescode){switch(code){casecodes::foo:return"foo";caseco

支持 Scott Meyer 建议的 C++ IDE : Prefer non-member non-friend functions over members

ScottMeyer关于非成员函数增加封装并允许更优雅的设计(设计方面)的论点对我来说似乎非常有效。看这里:Article但是我对此有疑问。(似乎还有其他人,尤其是库开发人员,他们通常完全忽略这一点)当我使用成员函数时,代码通常看起来更好、更合乎逻辑。不过,这可能是一种后天习得的品味,只是需要一些时间来习惯先查看算法,然后再查看对象。(颤抖)所以也许我只有一个问题:有了成员函数,我和我的IDE就知道类可以做什么。对我来说,这是巨大的!我使用任何不支持成员函数代码完成的东西来编程。在设计良好的库中,它完全取代了我的文档。即使我会查看api文档,浏览成员列表也感觉绝对自然、合乎逻辑,我可以

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

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

c++ - 什么是 C++ 中头文件的保护 block ?

我正在尝试使用Code::BlocksIDE创建一个C++类,并且有一个名为“Guardblock”的字段。我进行了搜索,但未能找到任何有用的信息。这个字段是做什么用的?谢谢。 最佳答案 保护block用于防止同一编译单元(c++文件)多次包含头文件。它们看起来像这样://Foo.h#ifndefINCLUDE_FILE_NAME_HERE_H_#defineINCLUDE_FILE_NAME_HERE_H_classFoo{};#endif如果将同一个文件包含多个文件,最终会出现多重定义错误。在小型项目中不需要使用包含保护,但在任

c++ - 以二进制模式从文件中读取 block 到缓冲区并将该缓冲区写入另一个文件

我正在努力实现这样的目标:while(ifstreamhasnotbeenentirelyread){readachunkofdataintoabufferthathassizeBUFLENwritethisbuffertoostream}起初我试图通过使用ifstream.eof()作为我的while条件来实现这一点,但我听说这不是可行的方法。我一直在查看std::ios::ifstream的其他功能,但无法弄清楚还有什么用。PS:我正在使用缓冲区,因为正在传输的文件可能会变得非常大。 最佳答案 iostream类负责所有必要的缓

c++ - 在析构函数中尝试 Catch block

在阅读HurbSutter的“MoreExceptionalC++”时,我偶然发现了以下代码://Example19-5:Alternativerightsolution//T::Close(){//...codethatcouldthrow...}T::~T()/*throw()*/{try{Close();}catch(...){}}我的理解是,这不是一个好主意。因为,如果在堆栈展开期间由于异常调用了T析构函数,然后Close()抛出异常,那么这将导致调用Terminate()。有人可以阐明这一点吗?提前致谢。 最佳答案 Myu

c++ - 代码块注释掉整个 block

我正在使用适用于C++的CodeblocksIDE,我尝试用谷歌搜索它,但找不到答案。如何在Codeblocks中注释掉一段代码?例如在Eclipse中它的ctrl+7。 最佳答案 Ctrl+Shift+C评论选中的blockCtrl+Shift+X取消注释。 关于c++-代码块注释掉整个block,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5288077/

c++ - GCC 选项 : warning on non-void functions without a return statement

如果存在具有非空返回值但在其定义中不包含return语句的函数,是否有生成错误/警告的GCC/g++选项?例如:intadd(inta,intb){a+b;} 最佳答案 -Wreturn-type.它由-Wall(您应该始终与-Werror-Wextra一起运行)启用。 关于c++-GCC选项:warningonnon-voidfunctionswithoutareturnstatement,我们在StackOverflow上找到一个类似的问题: https:

c++ - block 非专用模板 C++

是否有可能以某种方式禁止对未明确编写专门化的类型使用模板化函数。我的意思是类似的东西templatevoidfoo(){}templatevoidfoo(){}intmain(intargc,char*argv[]){foo();//okfoo();//Wrong-nospecializedversionforchar.}我不能跳过函数的通用版本,因为编译器说,当我尝试专门化时,foo不是模板函数。我可以简单地写一些不能在通用函数中编译的东西,并添加一些注释来解释原因,但这将是非常无用的。我想做的是能够直接导致编译器出现“foo()未定义”之类的错误。 最佳