草庐IT

If-None-Match

全部标签

c++ - if语句中的getline

根据我的阅读,在bool上下文中使用的getline()返回到void*的隐式转换。我在网络上的任何地方都没有找到对这一声明的任何真正引用。它到处都说隐式转换不存在,并且在bool上下文中指针应该是同类的(如果ptr==0比0转换为类型指针ptr).同样在标准中说在bool上下文中它被转换为未指定的bool类型。这到底是什么意思? 最佳答案 简而言之:这意味着您可以在if语句中使用getline(),如果有效,您将进入if语句block。在龙:getline()usedinaBooleancontextreturnsanimplic

c++ - "if (var)"使用数字转换而不是 bool 值

为什么if(var)...使用数字转换而不是bool值?我有一个实现两者的类:operatorint(){....}operatorbool(){....}但是如果我使用:if(my_class_var)....;然后使用int转换而不是boolean?!!?!编辑:正如versedmarald所说,这是正确的。我发现了不同之处。我实际上使用的是:operatorint(){....}operatorbool()const{...}还是被迷住了,为什么不一样?gcc版本4.6.2 最佳答案 如果你说的是真的,我认为你的编译器违反了标

c++ - enable_if 和互斥方法

我不明白为什么下面的代码不起作用。编译器(gcc)似乎同时实例化了两者方法,显然整数是有符号或无符号的,所以总是失败。我虽然enable_if在这里是为了避免这种情况。问:为什么编译出错,如何避免?usingnamespaceboost;//orstdasyouwanttemplatestructtest{//ifsignedtemplate,int>::type=0>test&operator,int>::type=0>test&operatorx;xetc.testy;yetc.} 最佳答案 SFINAE仅适用于immediat

c++ - enable_if 只有 C++11 吗?

在C++引用网站上查找enable_if,据说它只是C++11的一个特性。但是,我在C++98类型上使用GCC编译器编译了我自己的enable_if版本,它运行良好并且似乎能够用于任何版本的C++(打印1):#includenamespaceegg{templatestructenable_if{};templatestructenable_if{typedefTtype;};}intmain(){egg::enable_if::typex=1;std::cout我说的enable_if是任何C++版本的一个有效功能,但只是引入到C++标准中,或者还有其他原因吗?

c++ - 使用 enable_if 重载函数时出错

我有这段代码,其中一个函数根据可用的成员有不同的实现:#includetemplatestructD{structinner{Tfirst;};};templatestructD{usinginner=std::vector;};templateclassC{usingB=D;typenameB::innerb;public:typenamestd::enable_if().first),T>::value,T>::typefirst(){returnb.first;}typenamestd::enable_if()[0]),T>::value,T>::typefirst(){retu

if 条件中的 C++ 静态和非静态变量声明

以下if条件在VisualStudioC++中编译:if(intx=5){std::cout和if(staticintx=5){std::cout另一方面,gnu编译器只编译第一个。从测试来看,变量的范围似乎就在if条件内。但是,由于VisualStudio编译了两个版本,我想知道是否有任何差异? 最佳答案 按照C++标准,GNU是对的,VisualStudio是错的。继6.4/1之后:condition:expressiontype-specifier-seqdeclarator=assignment-expression允许使用

c++ - 在 C++17 中,是否可以使用带有初始值设定项的 if 语句来解包可选?

我正在使用std::optional编写一些代码,我想知道C++17的“带有初始化器的if语句”是否能够帮助解包值?std::optionaloptionalInt=GetOptionalInt();我在这里编写函数Unpack:if(auto[value,has_value]=optionalInt.Unpack();has_value){//Usevaluehere.}但是,我的问题是。C++17“带有初始化程序的if语句”在这里有帮助吗?如果是这样,它将如何编码?更新,这实际上主要是使用optional时的一个问题,它非常容易被滥用,因为optional和*optional都返回

c++ - 如何在没有警告的情况下在 gnu++11 标准中写入 "nested if...else statement for constants"?

当我使用嵌套的if....else语句时if(std::is_same::value){//dosomething}elseif(std::is_same::value){//dosomethingelse}...else{//printerror}我收到QACPP静态代码分析器的编译器警告qacpp-4.2.1-4090,其中包含消息“此‘if’语句中的条件是常量。”我该如何修复gnu++11标准中的编译器警告?注意:我不是C++专家,所以如果这个问题听起来很业余,请原谅。 最佳答案 对于T的特定实例,if条件是常量。换句话说st

c++ - 谷歌模拟 : How to configure custom message to explain match failure

如果匹配失败,Googlemock会打印如下消息:test.cpp:112:EXPECT_CALL(mock_obj,foo(MyMatcher(bar)))...Expectedarg#0:isequalto[1,2;3,4]Actual:{1}Expected:tobecalledonceActual:nevercalled-unsatisfiedandactive使用自定义匹配器MyMatcher我可以定义一个描述字符串,用于在匹配失败时生成失败消息。但它只定义了消息的Expectedarg#0部分。有什么方法可以自定义Actual的打印方式吗?在我的例子中,我不能为bar的类重

C++ count_if 函数 - 无法推断模板

我正在尝试使用C++的count_if函数来查看std::string中有多少个十六进制数字。当我尝试以下操作时:strings="123abc";cout我收到以下错误:count.cpp:14:13:error:nomatchingfunctionforcallto'count_if'cout但是,当我使用::isxdigit时,程序会编译并运行。我知道在::之前添加与在全局范围内使用isxdigit有关,但我不确定为什么它在这种情况下有帮助。我也认为它与C++语言环境有关,但我对它们不太熟悉。谢谢! 最佳答案 有一个函数int