草庐IT

c++ - `size_t` 总是 `vector<int>::size_type` 或任何其他容器类型的别名吗?

让我们举一个最简单的例子:公式1:std::vectorvec;//add10E11elementsfor(std::size_tn=0;n公式2:std::vectorvec;//add10E11elementsfor(std::vector::size_typen=0;n当然,unsignedint或任何不合适的数据类型在这里都不起作用,我们必须编译x64。我的问题是:在任何情况下,第一个公式是否会导致问题,或者我们是否可以安全地始终以这种更短的表示法来编写它?如果它们很容易覆盖(x86、任何其他容器、size_type的其他应用程序),我也会对类似的设置感兴趣。

c++ - 各种初始化和构造之间的关系?

我问的是Typet{...};和Typet({...});和Typet={...};是等价的吗?如果一个有效,另一个也应该得到相同的结果?如果没有explicit修饰符,它们是等价的吗? 最佳答案 不,这三种形式都是不同的,并且在不同情况下可能独立地是良构或病构的。Here'sanexample第一种形式编译,但第二种和第三种形式不编译:classType{public:explicitType(int,int){}};intmain(){Typet1{1,2};//OkTypet2({1,2});//errorTypet3={1,

c++ - char_traits<char16_t>::int_type 的大小不够大吗?

考虑以下程序:#include#include#includeintmain(int,char**){std::basic_stringstreamstream;stream.put(u'\u0100');std::cout输出是:Bad:0Bad:0Bad:1设置badbit的原因似乎是因为如果字符等于std::char_traits::eof(),'put'设置badbit。我现在不能再投入流中了。在http://en.cppreference.com/w/cpp/string/char_traits它指出:int_type:anintegertypethatcanholdallv

c++ - 为什么模板别名特化取决于引用它的上下文?

考虑这个示例代码:templateusingpt_type=typenameT::type;templateclassV{usingtype=int;public:usingpt=pt_type;};voidg(){V::pta;//Doescompilept_type>b;//Doesnotcompile}V::pt是pt_type>的别名.然而,它被定义的事实取决于它被引用的上下文。C++标准中哪里解释了模板实参替换模板实参是在引用别名特化的上下文中执行的? 最佳答案 无处可去。这是coreissue1554.Theintera

c++ - 将 std::type_index 作为模板参数传递给函数模板

考虑以下代码(工作正常):namespacefruit{structapple{};}namespacelanguage{structenglish{};}typedefstd::pairmyPairType;std::unordered_mapmyMap={{"paul",{"likes",std::type_index(typeid(fruit::apple))}},{"jonas",{"likes",std::type_index(typeid(language::english))}}};现在我有以下功能模板:templatevoidGenerateProfile(void*d

c++ - 如何编写通用特征以将 T::value_type 与其他特征相匹配?

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭4年前。Improvethisquestion我正在尝试创建一种可以检测的“包装特征”,对于某些T和一些现有的一元特征Concept,即:T是“可迭代的”,并且T::value_type满足Concept这很有用,因为我有其他代码可能需要各种类型,包括std::vector,我想将此包装器特征用于enable_if所述代码中的各种功能。这是一个

c++ - 具有默认值的模板特化

这是我正在使用的代码:#include#includeusingnamespacestd;usingmatch_type=void;usingmatch_type_bad=int;//versionAtemplatestructsimple_check:false_type{};//versionBtemplatestructsimple_check:true_type{};intmain(){cout::value::value具有此模板特化的程序最终输出为:10我对C++的tmp的理解有些困惑,因为我假设输出应该是11.我的推理是:与simple_check它进入版本B,然后扩展为

c++ - 我的 type_trait 在模板化/非模板化代码中的不同行为

在下面的代码片段中,has_bar在main和DoStuff方法中的行为不同:在main方法中,a_bar==false和b_bar==true。当我执行这个时,我得到2x“Foo”作为输出。为什么?#includestructA{voidFoo(){std::coutstructhas_bar:std::false_type{};templatestructhas_bar>:std::true_type{};templatevoidDoStuff(Tt){ifconstexpr(has_bar::value){t.Bar();}else{t.Foo();}}intmain(){Aa;

C++ 删除 static_cast<void*> (指针)行为

假设代码执行以下操作:T*pointer=newT();deletestatic_cast(pointer);结果是什么?未定义,内存泄漏,内存被删除? 最佳答案 行为未定义。关于delete表达式,C++标准说:Inthefirstalternative(deleteobject),ifthestatictypeoftheoperandisdifferentfromitsdynamictype,thestatictypeshallbeabaseclassoftheoperand’sdynamictypeandthestaticty

C++ 编译错误枚举 "does not name a type"

以下代码:foo.h#include"bar.h"classfoo{public:enummy_enum_type{ONE,TWO,THREE};foo();~foo(){}};foo.cppfoo::foo(){inti=bar::MY_DEFINE;}酒吧.h#include"foo.h"classbar{public:staticconstintMY_DEFINE=10;foo::my_enum_typevar;bar(){};~bar(){};};让g++编译器提示my_enum_type“没有命名类型”。为什么?所有header都有多个包含定义(为清楚起见,此处未显示)。谢谢