草庐IT

c++ - 为什么 const auto &p{nullptr} 工作,而 auto *p{nullptr} 在 C++17 中不起作用?

这个定义有效:constauto&b{nullptr};虽然失败:auto*b{nullptr};我尝试在VisualC++、GCC和Clang中编译它。他们都提示“无法推断类型”。在第二种情况下,不应该将b推导出为像std::nullptr_t这样的类型吗? 最佳答案 因为你声明b为指针,并初始化为空指针。但是一个空指针你不说什么类型的数据,所以编译器无法推断出类型。如果您希望b成为std::nullptr_t对象,则应去掉星号:autob{nullptr}; 关于c++-为什么con

c++ - 为什么 'auto' 不尊重一元减号运算符?

我对C++很陌生,但我发现auto的这种行为很奇怪:classA{};intmain(){Aa;autox=-(sizeof(a));cout变量x在这种情况下是unsigned尽管我在变量初始化时使用了一元减号运算符。为什么只考虑了sizeof(std::size_t)的返回类型,而没有考虑到因为使用了操作符而存储的数字是负数?我知道size_t是一个无符号整数。我已经在GCC8.1.0和C++17中尝试过。 最佳答案 这里的实际问题是一元减号运算符的使用,就像其他内置算术运算符一样,是整体提升的主题。令人惊讶的是,将一元减号应用

c++ - 为什么 'auto' 不尊重一元减号运算符?

我对C++很陌生,但我发现auto的这种行为很奇怪:classA{};intmain(){Aa;autox=-(sizeof(a));cout变量x在这种情况下是unsigned尽管我在变量初始化时使用了一元减号运算符。为什么只考虑了sizeof(std::size_t)的返回类型,而没有考虑到因为使用了操作符而存储的数字是负数?我知道size_t是一个无符号整数。我已经在GCC8.1.0和C++17中尝试过。 最佳答案 这里的实际问题是一元减号运算符的使用,就像其他内置算术运算符一样,是整体提升的主题。令人惊讶的是,将一元减号应用

c++ - 数组的 auto_ptr

简而言之,我想知道数组是否有类似auto_ptr的类型。我知道我可以自己推出,我只是确保那里没有什么东西。我也知道vector。但是我不认为我可以使用它们。我正在使用几个WindowsAPI/SDK,例如WindowsMediaSDK、DirectShowAPI,它们是为了取回一些结构来调用一个函数,该函数需要一个指针和一个大小两次。第一次传递NULL作为指针来取回我必须分配的结构的大小,以便接收我正在寻找的数据。例如:CComQIPtrpProps(m_pStreamConfig);DWORDcbType=0;WM_MEDIA_TYPE*pType=NULL;hr=pProps->G

c++ - 数组的 auto_ptr

简而言之,我想知道数组是否有类似auto_ptr的类型。我知道我可以自己推出,我只是确保那里没有什么东西。我也知道vector。但是我不认为我可以使用它们。我正在使用几个WindowsAPI/SDK,例如WindowsMediaSDK、DirectShowAPI,它们是为了取回一些结构来调用一个函数,该函数需要一个指针和一个大小两次。第一次传递NULL作为指针来取回我必须分配的结构的大小,以便接收我正在寻找的数据。例如:CComQIPtrpProps(m_pStreamConfig);DWORDcbType=0;WM_MEDIA_TYPE*pType=NULL;hr=pProps->G

c++ - 自动返回类型推导是否强制多个函数具有相同的返回类型?

考虑以下代码段:structA{autofoo(),bar();};autoA::foo(){return1;}autoA::bar(){return'a';}intmain(){}它在Clang++3.7.0中编译得很好。它fails在G++5.2.0中:main.cpp:Inmemberfunction'autoA::bar()':main.cpp:7:24:error:inconsistentdeductionfor'auto':'int'andthen'char'autoA::bar(){return'a';}自动返回类型推导是否强制在单个语句中声明的多个函数具有相同的返回类型

c++ - 自动返回类型推导是否强制多个函数具有相同的返回类型?

考虑以下代码段:structA{autofoo(),bar();};autoA::foo(){return1;}autoA::bar(){return'a';}intmain(){}它在Clang++3.7.0中编译得很好。它fails在G++5.2.0中:main.cpp:Inmemberfunction'autoA::bar()':main.cpp:7:24:error:inconsistentdeductionfor'auto':'int'andthen'char'autoA::bar(){return'a';}自动返回类型推导是否强制在单个语句中声明的多个函数具有相同的返回类型

c++ - auto 和 decltype 的关系

是autox=initializer;相当于decltype(initializer)x=initializer;或decltype((initializer))x=initializer;或者两者都没有? 最佳答案 decltype还考虑表达式是rvalue还是lvalue。Wikipediasays,Thetypedenotedbydecltypecanbedifferentfromthetypededucedbyauto.#includeintmain(){conststd::vectorv(1);autoa=v[0];//a

c++ - auto 和 decltype 的关系

是autox=initializer;相当于decltype(initializer)x=initializer;或decltype((initializer))x=initializer;或者两者都没有? 最佳答案 decltype还考虑表达式是rvalue还是lvalue。Wikipediasays,Thetypedenotedbydecltypecanbedifferentfromthetypededucedbyauto.#includeintmain(){conststd::vectorv(1);autoa=v[0];//a

c++ - 在循环中使用自动 C++

我收到以下代码有符号/无符号不匹配的警告:auton=a.size();for(autoi=0;i问题在于,通过将0分配给i,它变成了int而不是size_t。那么有什么更好的:size_tn=a.size();for(size_ti=0;i或者这个:auton=a.size();for(size_ti=0;i或者你有更好的解决方案?我更喜欢第一个,因为它更加一致,它只使用size_t而不是size_t和auto出于同样的目的。 最佳答案 基于范围的循环可能是更简洁的解决方案:for(constauto&i:a){}这里,i是con