草庐IT

make_new_type

全部标签

c++ - 为什么 new int (*)[3] 是错误的?

typedefint(*A)[3];int(**p)[3]=newA;//OKint(**q)[3]=new(int(*)[3]);//OKint(**r)[3]=newint(*)[3];//error来自GCC的错误是error:expectedprimary-expressionbefore')'token。为什么这个表达式中需要额外的括号? 最佳答案 标准将new-type-id定义为最长的new-declarators序列。还有一个注释,它说明了类似的情况(尽管它分配了指向函数的指针):5.3.4New[expr.new]

c++ - std::atomic<X>::value_type 发生了什么?

根据thisreferencemanualForeverystd::atomic(whetherornotspecialized),std::atomic::value_typeisX.但是如果我尝试使用这种类型,我会得到一个编译错误。我用g++8.2.1试过了:$g++-std=c++11test.cctest.cc:Infunction‘intmain()’:test.cc:6:23:error:‘value_type’isnotamemberof‘std::atomic’std::atomic::value_typex=0;还有clang6.0.1$clang-std=c++11

c++ - 'malloc' 和 'new' 是如何工作的?它们有何不同(实现方面)?

这个问题在这里已经有了答案:Whatisthedifferencebetweennew/deleteandmalloc/free?(15个答案)关闭去年。我知道它们在语法上有何不同,C++使用new,而C使用malloc。但是,在高层次的解释中,它们是如何工作的?参见Whatisthedifferencebetweennew/deleteandmalloc/free?

c++ - C++11 是否为 std::type_info 提供散列函数?

我仍在为我的One-Of-A-TypeContainerProblem寻找一个好的解决方案--经过深思熟虑,我认为能够只使用像std::map这样的东西会很好.不幸的是,std::type_info没有定义operator,我认为它定义一个是不合理的。然而,为它定义一个散列函数似乎是合理的,因为你可以简单地使用std::type_info的单例地址。对象作为合理的“哈希”。因此,您可以输入std::type_info进入std::unordered_map作为关键。C++11有提供这样的哈希函数吗?将使用std::type_info的内存地址单例是一个糟糕的哈希策略?

c++ - 为什么 std::make_move_iterator 适用于 vector<string> 但不适用于 vector<int>

我期待std::make_move_iterator总是会move内容,但似乎不会。看起来是在vector中move元素但不在vector.请看下面的代码片段:#include#include#include#includevoidmoveIntVector(){std::coutv1;for(unsignedi=0;iv2(std::make_move_iterator(v1.begin()+5),std::make_move_iterator(v1.end()));std::coutv1;for(unsignedi=0;iv2(std::make_move_iterator(v1.

c++ - Visual Studio 2015 : Can't create a new empty project c++

我最近获得了新版本的VisualStudio,但我似乎找不到如何为C++创建一个空项目。选项似乎只有C#和Basic。 最佳答案 VisualStudio2015的默认(典型)安装不再包含C++编译器和工具。这是社区中一个非常受欢迎的问题,因为许多开发人员不希望C++带来足迹。如果您尝试卸载VisualStudio2015,安装程序屏幕会弹出,您会看到一个名为“修改”的按钮。这将更改您当前的安装。执行自定义安装并选择您需要的C++功能/库。据我所知,大多数版本都支持C++,包括ExpressforWindows、Expressfor

报错:git clone 时候出现Please make sure you have the correct access rights and the repository exists.问题解决

输入gitclone命令时出现Pleasemakesureyouhavethecorrectaccessrightsandtherepositoryexists.错误,出现改问题的原因是git服务器没有存储本地ssh密钥。解决步骤:删除.ssh文件夹【C:\Users(本地用户名).ssh】中的known_hosts(直接删除即可)在下载好的Git中的bin目录下(一般是C:\ProgramFiles\Git\bin)打开bash.exe输入命令ssh-keygen-trsa-C“username”(注:username为你git上的用户名),如果执行成功。返回:Generatingpubli

c++ - make_pair 命名空间污染

在我最近编写的代码中,我注意到一个奇怪的行为。当我使用第一个参数为std::pair的make_pair时,make_pair变得“神奇地”在命名空间中可用(我不必使用std::限定符)#includeintmain(){inti1=2;inti2=10;inti3=0;//constructingapairusingstd::make_pair,everything'sokaystd::pairkey=std::make_pair(i1,i2);//here,whyismake_pairsuddenlymagicallyavailablewithoutthe//std::namesp

c++ - new int[25,2] 是什么意思?

下面代码中第二个参数加逗号是什么意思?int*num=newint[25,2]; 最佳答案 那是commaoperator在行动:它评估它的操作数并返回最后一个,在你的情况下2。所以这等同于:int*num=newint[2];可以肯定地说25,2部分不是预期的,除非它是一个技巧问题。编辑:谢谢DidierTrosset。 关于c++-newint[25,2]是什么意思?,我们在StackOverflow上找到一个类似的问题: https://stackove

C++11 auto 和 size_type

鉴于auto的以下用法:std::vectorv;for(autoi=0;i对于C++来说,推导i将是理想的选择作为std::vector::size_type,但如果它只查看i的初始化程序,它会看到一个整数。i的推导类型是什么?在这种情况下?这是auto的适当用法吗?? 最佳答案 使用decltype而不是auto来声明i。for(decltype(v.size())i=0;i更好的是,如@MarkB的回答所示,使用迭代器迭代vector。 关于C++11auto和size_type,