草庐IT

c++ - 未在 lambda 内部调用显式运算符 bool — MSVC 错误?

#includestructT{explicitoperatorbool(){returntrue;}};intmain(){Tt;if(t){}//OKautol=[&](){if(t){}//Error};}MSVC的行为在这里似乎奇怪地不一致;OK行和Error行之间的唯一区别是它们在lambda中。这是错误吗? 最佳答案 Isthisabug?是的,绝对是。您的程序没有任何问题,bool转换运算符在两种情况下都应被调用。 关于c++-未在lambda内部调用显式运算符bool—M

c++ - 显式默认和删除的构造函数 : is there any similar functionality available in VS2012?

在VS2012中,“显式默认和删除特殊成员函数”功能(http://en.wikipedia.org/wiki/C++0x#Explicitly_defaulted_and_deleted_special_member_functions、http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm)尚不可用(http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx)。是否有任何解决方法来使用此类功能,即使非常冗长?在实践中,我可以翻译这个吗struc

c++ - 为什么显式运算符 bool 让我转换为任何原始类型?

structtest{explicitoperatorbool()const{returntrue;}};intmain(){testa;floatb=static_cast(a);//b=1}这是正确的,还是一个VS错误?如果按照设计,这里的最佳做法是什么?我应该/可以做些什么来防止这种情况发生吗? 最佳答案 这看起来像一个VS错误:显式运算符不应该应用于bool以外的类型。在这两个C++11mode中都无法在gcc中编译和C++98mode.CanIdoanythingtopreventthis?您已经完成了您需要做的事情-这是

c++ - 显式调用类的强制转换运算符方法是否比强制转换更好?

如果一个类提供了一个方法operatorwchar_t*并且我在编译器无法自动推断转换的情况下使用此类的实例,显式调用转换运算符方法而不是实际执行转换是否被认为是不好的?例如:x.doStuff(o.operatorwchar_t*())对比x.doStuff(static_cast(o))第一个选项是坏的/错误的,还是调用一个运算符方法是完全可以接受的? 最佳答案 至少这是不寻常的……特别是因为第二个结构非常地道。即使使用普通的转换运算符也应该更好。 关于c++-显式调用类的强制转换运

c++ - std::map emplace 因显式构造函数而失败

classA{public:explicitA(intx){}};vectorv;v.push_back(1);//compilererrorsincenoimplicitconstructorv.emplace_back(1);//callsexplicitconstructor以上来自video大卫·斯通。我不明白的是为什么emplace_back调用显式构造函数?我在C++标准中看不到任何内容使这合法。只有在听了DavidStone的youtube视频后,我发现了这件事。现在,我对std::map进行同样的尝试。mapm;m.insert(pair(1,2));//compile

c++ - 总是使用构造函数而不是显式转换运算符

我有以下类(class):templateclassFoo{public:Foo(T1*obj):obj(obj){}templateFoo(constFoo&other):obj(other.obj){}templateexplicitoperatorFoo(){returnFoo(static_cast(obj));}T1*obj;};第二个构造函数的目的是从Foo隐式转换至Foo如果从X*进行隐式转换,则允许至Y*是允许的。转换运算符允许从Foo进行显式转换至Foo使用来自X*的显式转换至Y*.但我注意到转换运算符从未被使用过。编译器总是使用第二个构造函数,即使我进行显式转换也是

c++ - template<> 用于成员枚举的显式特化

根据17.7.3[temp.expl.spec]第5段(N4659),...Membersofanexplicitlyspecializedclasstemplatearedefinedinthesamemannerasmembersofnormalclasses,andnotusingthetemplatesyntax.Thesameistruewhendefiningamemberofanexplicitlyspecializedmemberclass.However,templateisusedindefiningamemberofanexplicitlyspecializedm

c++ - lambda 表达式中引用捕获和非显式捕获的 constexpr 变量之间的区别

这个问题Accesstoconstexprvariableinsidelambdaexpressionwithoutcapturing回答了为什么下面示例中的ref-capture不是严格必要的。但另一方面,如果它被捕获,则会出现错误。错误似乎是由foo()的递归性质触发的。templateconstexprintbar(constT&x){//NOK//constexprintbar(Tx){//OKreturnx;}templateintfoo(constT&l){constexprautox=l()-1;autoy=[&]{returnbar(x);};//ifref-captu

c++ - 模板模板参数的显式匹配

考虑这个函数:templateclassC,classT,classAlloc>voidfoo(C&container){std::cout函数foo()接受std::vector,但它也接受std::map在C++17中因为Compare和Allocator有默认值。备注std::map在C++14中失败。我怎样才能制作foo()只接受只有2个模板参数的模板,所以失败并显示std::map在C++17中? 最佳答案 HowcanImakefooonlyaccepttemplateswithexactlyonly2templatep

c++ - 显式默认的 constexpr ctor 是否应该允许非 constexpr 初始化

我只是偶然发现了GCC和Clang之间关于显式默认的constexprctor和一些继承的以下差异......templatestructA{constexprA()=default;Tv;};structB:A{constexprB()=default;};GCC立即拒绝该代码,而Clang允许实例化这两种类型的非constexpr版本。我的猜测是Clang可能是正确的,但我不能100%确定... 最佳答案 问题归结为:是默认初始化的constexpr构造函数一些内置类型有效的非静态数据成员,如果不使用呢?tl;dr:对于非模板构