草庐IT

six_or_none

全部标签

c++ - 从非实例化上下文中引用特定模板特化 : instantiation or not?

考虑下面的例子templatestructS{Aa;voidfoo(){}};templatevoidbar(){S*p=0;}templatevoidbaz(){S{}.foo();}templatevoidqux(){Ss{};}intmain(){}函数模板bar,baz和qux故意不实例化。baz的定义由于“明显”原因无法在GCC和Clang中编译-S是S的无效特化.但是,哪种语言规则适用于这种情况?一方面,S不依赖于baz的模板参数,成员访问要求它是完整的,这会触发S的实例化,失败了。诊断是必需的。另一方面,我们有一条笼统的规则“如果不能为非实例化模板生成有效的特化,则代码格

c++ - boost::optional deprecated get_value_or

我怀疑boost::optional的get_value_or已被弃用,因为如果将右值作为default参数传递是不安全的。但是,有时能够引用可选值或默认替代值很有用。以下安全吗?templateTconst&get_reference_or(boost::optionalconst&opt,Tconst&alt){if(opt)returnopt.get();elsereturnalt;}templateTconst&get_reference_or(boost::optionalconst&,T&&)=delete; 最佳答案

c++ - 绑定(bind)对 object-or-dummy 的引用的样式

将右值引用绑定(bind)到给定对象或其临时拷贝的最佳方法是什么?A&&var_or_dummy=modify?static_cast(my_A):static_cast(static_cast(my_A));(这段代码在我最近的GCC4.6上不工作……我记得它以前工作过,但现在它总是返回一个拷贝。)在第一行,static_cast将my_A从左值转换为xvalue。(C++0x§5.2.9/1-3)第二行的内部static_cast执行左值到右值的转换,外部从这个prvalue获得一个xvalue。这似乎得到支持,因为命名引用根据§12.2/5有条件地绑定(bind)到临时对象。相同

C++ 错误 : "Expression must have integral or enum type"

这个问题在这里已经有了答案:Whycan'ttheswitchstatementbeappliedtostrings?(22个答案)关闭8年前。我在下面的(不完整的)函数的switch语句中收到错误“表达式必须具有整数或枚举类型”。我盯着它看了一会儿,想不通这是怎么回事。非常感谢任何见解。std::stringCWDriver::eval_input(std::stringexpr){std::vectorparams(split_string(expr,""));std::stringoutput("");if(params.size()==0){output="Inputcanno

c++ - E_FAIL or S_FALSE,哪个更适合表示没有这个属性?

我有一个图像检测模块,它被封装为一个COM模块。我导出了一个Key/ValueGetterAPI,例如:GetImageAttr(UINTkey,void*pValue);。我们的产品可能会或可能不会在图像上附加特殊结构,因此我的客户可以通过此API查询特定结构。可能的用法如下:ImageSpecialAttributeattr={};HRESULThr=pImageDetector->GetImageAttr(IMAGE_SPECIAL_ATTRIBUTE,(void*)&attr);如果图像确实有这样的附加结构,则返回S_OK是微不足道的。但如果没有,我应该返回E_FAIL还是S_

c++ - 为什么 insert_or_assign 没有迭代器重载?

问题在C++17中,标准库中的关联容器将具有insert_or_assign成员函数,该函数将执行其名称所暗示的操作。不幸的是,它似乎没有用于批量插入/分配的基于迭代器的接口(interface)。我什至triedtocompile小例子,从编译器错误来看,编译器找不到合适的重载,而且两个候选者都不太接近基于迭代器的接口(interface)。问题为什么C++17不包含基于迭代器的insert_or_assign以进行批量操作?有什么技术原因吗?设计问题?我的假设和想法我看不出有任何技术原因不添加基于迭代器的批量插入/添加。这似乎很可行。它无论如何都需要查找key,所以我没有看到任何违

c++ - 模板参数列表中的额外 typename 关键字 : is it valid or not?

以下代码使用clang3.5.0和g++4.9.0成功编译(使用-Wall-Wextra-pedantic-errors标志)在C++03(flag-std=C++03)下,C++11(flag-std=C++11),和C++14(flag-std=C++14):namespaceN{typedefintT;enumE{};}templatestructST{};templatestructSE{};intmain(){}在非类型模板参数声明之前添加额外的typename关键字是否有效?请注意,以下代码无法编译(如C++03、C++11和C++14代码):typedefintT;enu

c++ - 哪个更高效/整洁 : clearing an existing stringstream or creating a new one?

只是出于好奇而提出的简单问题。类上的多个方法需要使用字符串流,或者特别是ostringstream。1)有一个stringstream变量作为类成员,然后在使用它之前清除它,即msg.str("")2)每次需要使用时,在每个方法中本地创建一个新的stringstream变量。就效率和整洁度而言,哪种实现方式最好?我的直觉是选项1,但不确定初始构造与每次调用str()相结合是否会更糟?附言我读过Initializing..whichoneismoreefficient?和Whichisquicker/moreefficient?,我的下一步是研究分析和编写一个小的测试应用程序,但我觉得问

ios - Xcode 警告 : Not such file or directory (. pcm 文件)

我正在处理一个iOS项目,Xcode向我显示以下警告:warning:/var/folders/qj/lk4bdr_x5fs9cvcj4jgx61mmy6f8jd/C/org.llvm.clang.codytwinton/ModuleCache/2UNUM8IHHP92Q/Foundation-KJNK6ICRXLXW.pcm:Nosuchfileordirectorynote:whileprocessing/var/folders/qj/lk4bdr_x5fs9cvcj4jgx61mmy6f8jd/C/org.llvm.clang.codytwinton/ModuleCache/2U

ios - NSPredicate 与 OR 返回错误

我对以下谓词有疑问:NSPredicate*predicate=[NSPredicatepredicateWithFormat:@"(creatorUserRecordID==%@)OR(toUser==%@)",userId,userId];当我在查询中使用它时CKQuery*query=[[CKQueryalloc]initWithRecordType:@"Message"predicate:predicate];我有一个错误:'CKException',原因:'意外的表达'。当我像这样分别使用这两个时:NSPredicate*predicate1=[NSPredicatepred