小编Gau*_*rav的帖子

关于使用flagbit设置内部错误标志的说明

在C++入门中我找到了这段代码:

 if (cin.fail())
 { // bad input
      cerr<< "bad data, try again"; // warn the user
      cin.clear(istream::failbit); // reset the stream
      continue; // get next input
 }
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么istream::failbit用于设置错误状态标志,我的意思是,因为错误已经发生(因此流程现在在if块然后必须设置failbit,他们为什么用它来设置错误标志那又一次.我在理解这个问题上哪里错了?

编辑:该书说"我们打印一个警告并清除failbit状态",但IMO clear(istream :: failbit)正在使用failbit中包含的值设置的当前状态.那么为什么本书将流的状态设置为failbit,因为它将阻止cin运行,因为它将处于错误状态.++++通过流的状态,实际上谈论的是什么,是eofbit,badbit,goodbit,failbit还是它们的组合?我怎么知道这些单独位的价值呢?

c++ io

8
推荐指数
1
解决办法
786
查看次数

程序选择'\ 0'即使没有提到 - 澄清

所以,我可以预测这个程序会做什么:

int main()
{
   char d[] = {'h','e','l','l','o'};
   const char *c = d;
   std::cout << *c << std::endl;
   while ( *c ) {
      c = c + 1;
      std::cout << *c << std::endl;
      if ( *c == '\0' )
         std::cout << "Yes" << std::endl;
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

从我的理解,代码应该永远不会打印因为\0字符数组中没有d[],所以这个程序正在采摘的垃圾值是什么?我做了这个,同时应该无限次地运行.是对的吗?

c++ arrays

1
推荐指数
1
解决办法
109
查看次数

警告:返回对临时的引用 - 奇怪的情况(Rvalue的澄清)

在这段代码中:

const int & fun(const int &i)
{
    return 2*i;
}

int main()
{
    const int k=3;
    cout<<fun(k)<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,参数fun不是本地的(没有临时对象存储引用返回类型)那么为什么会出现此警告? +如果我删除常量从返回类型函数fun,它说

错误:从'int'类型的右值开始,无效初始化'int&'类型的非const引用

但是在删除2*(只剩下返回的值时)它没有显示任何错误 - >我能想到的是这个2*的东西是将返回转换为Rvalue但是后来不是Rvalue本身的返回值?我哪里错了?

c++ reference temporary return-value rvalue

1
推荐指数
1
解决办法
317
查看次数

对任何声明中的评论进行澄清

当我在任何声明中评论时:

   std::cout/*inside cout statement*/<<"Howdy"<<endl;  //Code 1
Run Code Online (Sandbox Code Playgroud)

要么

 std::cout/*inside cout 
 statement*/<<"Howdy"<<endl;    //Code 2
Run Code Online (Sandbox Code Playgroud)

它工作得很好(尤其是代码2的工作令人惊讶,其中整个事情被分成两行 - 当一些令牌在内部被破坏时,唯一的问题就出现了:

  c/*the hell*/out<<"Howdy"<<endl;  //cout is broken
Run Code Online (Sandbox Code Playgroud)

编译器究竟如何处理这个?

c++

1
推荐指数
1
解决办法
50
查看次数

通过调用另一个函数将指针移动到某个地址

为什么在此代码中指针转移到另一个位置:

#include <stdio.h>

void f(int *p)
{
        int j=2;
        p=&j;
        printf("%d\n%p\n%d\n",*p,&j,p);
}

int main(void)
{
        int *q;
        int m=98;
        q=&m;
        f(q);
        printf("%p ",q);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

2
0x7ffff5bf1bcc
0x7ffff5bf1bcc
0x7ffff5bf1bc8

我明白,当函数f()与打印值完成j地址 j内存占用j追溯到堆栈,但IMO p应继续指向该位置甚至在功能上与应该打印相同的地址同样.这有什么问题?

c pointers function-calls

-2
推荐指数
1
解决办法
84
查看次数

标签 统计

c++ ×4

arrays ×1

c ×1

function-calls ×1

io ×1

pointers ×1

reference ×1

return-value ×1

rvalue ×1

temporary ×1