这个定义有效:constauto&b{nullptr};虽然失败:auto*b{nullptr};我尝试在VisualC++、GCC和Clang中编译它。他们都提示“无法推断类型”。在第二种情况下,不应该将b推导出为像std::nullptr_t这样的类型吗? 最佳答案 因为你声明b为指针,并初始化为空指针。但是一个空指针你不说什么类型的数据,所以编译器无法推断出类型。如果您希望b成为std::nullptr_t对象,则应去掉星号:autob{nullptr}; 关于c++-为什么con
A.hpp:classA{private:std::unique_ptrfile;public:A(std::stringfilename);};A.cpp:A::A(std::stringfilename){this->file(newstd::ifstream(filename.c_str()));}我得到的错误被抛出:A.cpp:7:43:error:nomatchforcallto‘(std::unique_ptr>)(std::ifstream*)’有没有人知道为什么会发生这种情况?我尝试了许多不同的方法来让它工作,但都无济于事。 最佳答案
A.hpp:classA{private:std::unique_ptrfile;public:A(std::stringfilename);};A.cpp:A::A(std::stringfilename){this->file(newstd::ifstream(filename.c_str()));}我得到的错误被抛出:A.cpp:7:43:error:nomatchforcallto‘(std::unique_ptr>)(std::ifstream*)’有没有人知道为什么会发生这种情况?我尝试了许多不同的方法来让它工作,但都无济于事。 最佳答案
我对C++很陌生,但我发现auto的这种行为很奇怪:classA{};intmain(){Aa;autox=-(sizeof(a));cout变量x在这种情况下是unsigned尽管我在变量初始化时使用了一元减号运算符。为什么只考虑了sizeof(std::size_t)的返回类型,而没有考虑到因为使用了操作符而存储的数字是负数?我知道size_t是一个无符号整数。我已经在GCC8.1.0和C++17中尝试过。 最佳答案 这里的实际问题是一元减号运算符的使用,就像其他内置算术运算符一样,是整体提升的主题。令人惊讶的是,将一元减号应用
我对C++很陌生,但我发现auto的这种行为很奇怪:classA{};intmain(){Aa;autox=-(sizeof(a));cout变量x在这种情况下是unsigned尽管我在变量初始化时使用了一元减号运算符。为什么只考虑了sizeof(std::size_t)的返回类型,而没有考虑到因为使用了操作符而存储的数字是负数?我知道size_t是一个无符号整数。我已经在GCC8.1.0和C++17中尝试过。 最佳答案 这里的实际问题是一元减号运算符的使用,就像其他内置算术运算符一样,是整体提升的主题。令人惊讶的是,将一元减号应用
我在使用shared_ptr时遇到问题和weak_ptr连同enable_shared_from_this.当我用谷歌搜索我所看到的症状时,每个人都建议“当没有shared_from_this()实例拥有你的对象时,你不能使用shared_ptr。但这不是我的情况。考虑这段代码:#include#includeclassMyClass:std::enable_shared_from_this{public:voidthis_fails(){//Doesn'tevenassert(),becauseitthrowsbad_weak_ptrassert(shared_from_this()
我在使用shared_ptr时遇到问题和weak_ptr连同enable_shared_from_this.当我用谷歌搜索我所看到的症状时,每个人都建议“当没有shared_from_this()实例拥有你的对象时,你不能使用shared_ptr。但这不是我的情况。考虑这段代码:#include#includeclassMyClass:std::enable_shared_from_this{public:voidthis_fails(){//Doesn'tevenassert(),becauseitthrowsbad_weak_ptrassert(shared_from_this()
简而言之,我想知道数组是否有类似auto_ptr的类型。我知道我可以自己推出,我只是确保那里没有什么东西。我也知道vector。但是我不认为我可以使用它们。我正在使用几个WindowsAPI/SDK,例如WindowsMediaSDK、DirectShowAPI,它们是为了取回一些结构来调用一个函数,该函数需要一个指针和一个大小两次。第一次传递NULL作为指针来取回我必须分配的结构的大小,以便接收我正在寻找的数据。例如:CComQIPtrpProps(m_pStreamConfig);DWORDcbType=0;WM_MEDIA_TYPE*pType=NULL;hr=pProps->G
简而言之,我想知道数组是否有类似auto_ptr的类型。我知道我可以自己推出,我只是确保那里没有什么东西。我也知道vector。但是我不认为我可以使用它们。我正在使用几个WindowsAPI/SDK,例如WindowsMediaSDK、DirectShowAPI,它们是为了取回一些结构来调用一个函数,该函数需要一个指针和一个大小两次。第一次传递NULL作为指针来取回我必须分配的结构的大小,以便接收我正在寻找的数据。例如:CComQIPtrpProps(m_pStreamConfig);DWORDcbType=0;WM_MEDIA_TYPE*pType=NULL;hr=pProps->G
是autox=initializer;相当于decltype(initializer)x=initializer;或decltype((initializer))x=initializer;或者两者都没有? 最佳答案 decltype还考虑表达式是rvalue还是lvalue。Wikipediasays,Thetypedenotedbydecltypecanbedifferentfromthetypededucedbyauto.#includeintmain(){conststd::vectorv(1);autoa=v[0];//a