草庐IT

commentable_type

全部标签

c++ - 函数/方法重载 C++ : Data type confusion?

我在C++中重载方法时遇到了一些问题。作为问题的一个例子,我有一个类,其中有许多方法被重载,并且每个方法都有一个具有不同数据类型的参数。我的问题:这些方法应该出现在类中是否有特定的顺序,以确保根据其参数数据类型调用正确的方法?classSomeClass{public:...voidMethod(boolparamater);voidMethod(std::stringparamater);voidMethod(uint64_tparamater);voidMethod(int64_tparamater);voidMethod(uint8_tparamater);voidMethod(

c++ - Clang 问题 : implicit type conversion at construction time

概要我正在努力使C++11代码与Clang兼容,并遇到了GCC>=4.6接受代码而Clang>=3.1不接受的情况。Clang认为候选构造函数不可行。详情这里是一个精简的例子来说明这个问题:#includetemplatestructT;templatestructT{typedefTsuper;constexprT(){}templateT(Args&&...){}};templatestructT:T{typedefTsuper;Headhead;T(Headarg):super(),head(std::move(arg)){}};structvoid_type{constexpr

c++ - std::type_info::hash_code() 的唯一性和 "should"的含义

是否意味着要保证相同的std::type_info::hash_code()值表示相同的类型?Cplusplus.com似乎是这么说的:Thisfunctionreturnsthesamevalueforanytwotype_infoobjectsthatcompareequal,anddifferentvaluesfordistincttypesthatdonot.[Emphasismine]Cppreference似乎另有说法:Returnsanunspecifiedvalue,whichisidenticalforobjects,referringtothesametype.No

c++ - 在 OSX 10.9.1 上使用 g++ 编译时出错 : unknown type name '__darwin_wctype_t'

在OSX10.9.1上使用g++从命令行编译基本代码(我附加了一个helloworld作为示例)时#includeintmain(){std::cout我用命令编译:g++hello.cc-ohw这会生成以下错误消息:Infileincludedfromhello.cc:1:Infileincludedfrom/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/iostream:38:Infileincludedfrom/Applicat

C++11 "enumerated types"(17.5.2.1.2)

引自C++11标准(17.5.2.1.2枚举类型):1SeveraltypesdefinedinClause27areenumeratedtypes.Eachenumeratedtypemaybeimplementedasanenumerationorasasynonymforanenumeration(Suchasanintegertype,withconstantintegervalues(3.9.1)).2Theenumeratedtypeenumeratedcanbewritten:enumenumerated{V0,V1,V2,V3,.....};staticconstenu

c++ - 带有#pragma comment(lib) 的相对路径

使用VisualStudio2010,我想在#pragmacomment(lib)中指定一个相对于包含它的cpp文件的路径。我试过了#pragmacomment(lib,__FILE__"\\..\\foo.lib")在foo.cpp中,它似乎可以工作。但是,这对我来说似乎很老套。有没有更简单的方法? 最佳答案 不,如果这需要与.cpp文件相关,则不可以。这很不寻常,您通常不能保证.lib已部署在与使用该库的客户端源代码相关的目录中。尽管您当然可以提供规定这一点的安装说明。通常的方法是仅指定“foo.lib”并将链接器配置为使用“附

C++ 函数模板 : Derived and explicit return type

我有以下问题,我只是没有找到合适的解决方案(也许没有):我有一个模板化方法,其中返回类型取决于输入类型,感谢C++11decltype返回类型可以很容易地导出,但是如果需要,我还希望允许用户明确定义返回类型。更正式地说,我有一个模板化函数f,我想被调用为f(x),既没有显式定义输入类型,也没有显式定义返回类型。我也希望能够将其称为fx()明确定义返回类型,但输入类型仍然自动派生。现在,用C++11满足第一个约束很容易(假设还有另一个模板化方法:templateautof(constInT&in)->decltype(/*codederivingthereturntypeusingin*

c++ - type、value_type 和 element_type 之间有什么区别,何时使用它们?

我已经编写了一个模板类,它应该公开其模板参数,但我不确定合适的命名。我已经为本质上相同的东西找到了三个不同的名称(据我所知):容器,例如std::vector使用value_type智能指针,例如std::unique_ptr使用element_typestd::reference_wrapper仅使用type这些不同名称背后的想法是什么?哪些标准算法或特征类取决于哪个名称?我应该为我的类使用哪个名称(介于智能指针和引用包装器之间的名称)? 最佳答案 value_type是容器(以及迭代器等)的成员类型。它提供对象的类型,通常是一个

c++ - typeid 何时可以为同一类型返回不同的 type_info 实例?

AndreiAlexandrescu写入ModernC++Design:Theobjectsreturnedbytypeidhavestaticstorage,soyoudon'thavetoworryaboutlifetimeissues.安德烈继续说道:Thestandarddoesnotguaranteethateachinvocationof,say,typeid(int)returnsareferencetothesametype_infoobject.尽管标准不保证这一点,但在GCC和VisualStudio等常见编译器中如何实现这一点?假设typeid没有泄漏(并且每次调

c++ - "temporary of type ' A ' has protected destructor", 但它的类型是 B

在以下代码中,使用Clang8.0.0+和-std=c++17编译,使用B{}创建派生类实例会报错错误:'A'类型的临时对象具有protected析构函数。当临时文件的类型为B(因此应该有一个公共(public)析构函数)时,为什么A会出现在此消息中?https://godbolt.org/z/uOzwYaclassA{protected:A()=default;~A()=default;};classB:publicA{//canalsoomitthese3lineswiththesameresultpublic:B()=default;~B()=default;};voidfoo(