草庐IT

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++ count_if 函数 - 无法推断模板

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

c++ - if-cases 泄漏中定义的变量? (也就是为什么这甚至可以编译?)

似乎在if语句中声明的变量会泄漏到以下语句?我复制粘贴了一些代码,令我惊讶的是它在不应该编译的时候编译了!我正要提交代码,幸运的是我在那之前发现了错误。下面是一个显示问题的工作(?)程序。以下代码片段调用一个不存在的对象上的函数:#includeclassA{public:virtual~A(){}};classB:publicA{public:voidfooB(){std::cout(a)){b->fooB();}elseif(C*c=dynamic_cast(a)){c->fooC();b->fooB();}return0;}它编译并且输出是这样的:fooCfooB这肯定是错误的。