草庐IT

c++ - "most important const"与 auto_ptr : Why the code does not compile?

以下代码无法在VisualC++2008或2010上编译:#includestructA{};std::auto_ptrfoo(){returnstd::auto_ptr(newA);}conststd::auto_ptrbar(){returnstd::auto_ptr(newA);}intmain(){conststd::auto_ptr&a=foo();//mostimportantconstconststd::auto_ptr&b=bar();//errorC2558://class'std::auto_ptr'://nocopyconstructoravailableorco

c++ - C & C++ : What is the difference between pointer-to and address-of array?

C++11代码:inta[3];autob=a;//bisoftypeint*autoc=&a;//cisoftypeint(*)[1]C代码:inta[3];int*b=a;int(*c)[3]=&a;b和c的值相同。b和c有什么区别?为什么它们不是同一类型?更新:我将数组大小从1更改为3。 最佳答案 sizeof运算符的行为应该有所不同,其中之一,尤其是当您将a的声明更改为不同数量的整数时,例如inta[7]:intmain(){inta[7];autob=a;autoc=&a;std::cout对我来说,这会打印:428那是因

c++ - 在输出参数中使用 auto

有没有办法在这种情况下使用auto关键字:voidfoo(bar&output){output=bar();}intmain(){//Imaginarycodeautoa;foo(a);}当然,不可能知道a是什么类型。因此,解决方案应该是以某种方式将它们合并到一个句子中。这个可以用吗? 最佳答案 看起来您想要默认初始化给定函数期望作为参数的类型的对象。你不能用auto做到这一点,但你可以写一个特征来提取函数期望的类型,然后用它来声明你的变量:namespacedetail{//expectstheargumentnumberanda

c++ - 未初始化 auto_ptr 时 get() 是否可靠?

考虑以下代码:std::auto_ptrp;if(p.get()==0){...}get()成员函数是否是检查p是否未初始化的标准且可靠的方法?无论平台、编译器、编译器的优化标志等如何,它总是返回0吗? 最佳答案 不存在未未初始化的std::auto_ptr,defaultconstructor将指针初始化为0:explicitauto_ptr(X*p=0);因此get()将在默认构造的std::auto_ptr上有效地返回“0”。 关于c++-未初始化auto_ptr时get()是否可

c++ - 我无法理解的简单 lambda 函数

我正在学习使用const的C++14lambda,今天我的friend向我展示了以下内容。我听不懂。它是lambda函数吗?语法与我通常看到的不符。它的语法与lambda函数匹配,但失败并出现长错误。intmain(){//1.constautox=[&]{autol=0;l=99;returnl;}();std::cout我想知道1是什么,为什么2编译失败。 最佳答案 Iwantedtoknowwhatis1.andwhy2.failstocompile.(1)constautox=[&]{autoconst_val=0;cons

c++ - 为什么这个 auto_ptr 的 dynamic_cast 会失败?

#include"iostream"classA{private:inta;public:A():a(-1){}intgetA(){returna;}};classA;classB:publicA{private:intb;public:B():b(-1){}intgetB(){returnb;}};intmain(){std::auto_ptra=newA();std::auto_ptrb=dynamic_cast>(a);return0;}错误:不能dynamic_cast`(&a)->std::auto_ptr::get()const 最佳答案

c++ - 如何实现 std::auto_ptr 是复制构造函数?

回到我的疯狂AutoArraythingy...(从那里引用重要的部分:classAutoArray{void*buffer;public://CreatesanewemptyAutoArrayAutoArray();//std::auto_ptrcopysemanticsAutoArray(AutoArray&);//Noteitcan'tbeconstbecausethe"other"reference//isnull'doncopy...AutoArray&operator=(AutoArray);~AutoArray();//Nothrowswap//Note:Atthemom

c++ - 为什么 vector.push_back(auto_ptr) 无法编译?

我了解到STL可以禁止程序员将auto_ptr放入容器中。例如下面的代码不会编译:auto_ptra(newint(10));vector>v;v.push_back(a);auto_ptr有拷贝构造函数,为什么这段代码还能通过? 最佳答案 查看thedefinitionofstd::auto_ptr:namespacestd{templatestructauto_ptr_ref{};templateclassauto_ptr{public:typedefXelement_type;//20.4.5.1construct/copy/

c++ - 尾随返回类型中的占位符是否会覆盖初始占位符?

g++似乎接受auto和decltype(auto)的任意组合作为初始和尾随返回类型:inta;autof(){return(a);}//intautog()->auto{return(a);}//intautoh()->decltype(auto){return(a);}//int&decltype(auto)i(){return(a);}//int&decltype(auto)j()->auto{return(a);}//intdecltype(auto)k()->decltype(auto){return(a);}//int&但是,clang拒绝j和k,说:error:funct

c++ - vector<auto> 是不允许的吗? (错误 : invalid use of ‘auto’ )

我有:#include#includeusingnamespacestd;intmain(){autoa=-SOME_CONST_MAX;vectormyVec{a,a,a,a};}我不知道SOME_CONST_MAX的类型但我想制作一个-SOME_CONST_MAX类型的vector.我假设vector会起作用,因为它会从a的类型推导出来.我正在运行这些错误:g++-std=c++14main.cppmain.cpp:9:9:error:invaliduseof‘auto’vectormyVec{a,a,a,a};^main.cpp:9:13:error:templateargume