小编oo_*_*uel的帖子

使用gdb调试C++ 11 rvalue引用

我只是注意到我无法正确调试rvalue引用gdb-7.7.1.

void simple(int &&i) {}
Run Code Online (Sandbox Code Playgroud)

当我输入这个简约函数时,我无法获得任何有意义的信息i.它的类型未知gdb.

simple(int&&) (i=<unknown type in /tmp/test, CU 0x0, DIE 0xcd78>) at test.cpp:10
(gdb) p i
$2 = <unknown type in /tmp/test, CU 0x0, DIE 0xcd78>
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?有没有明智的解决方法?升级是否会gdb-7.10解决这个问题

gdb rvalue-reference c++11

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

为什么"std :: string(blablabla());" 编译没有错误?

为什么以下代码在没有警告的情况下编译.请注意,blablabla()未定义任何地方.

我测试了它在gcc 5.1.0clang-3.7.0(有和没有-std = C++ 11标志).

#include <string>

int main()
{
    std::string(blablabla());
}
Run Code Online (Sandbox Code Playgroud)

这个问题不是最令人烦恼的解析模糊的重复,因为相关的例子用参数声明函数.

c++ compiler-errors compilation c++11

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

运算符<<重载如何工作?

给出一个类:

struct employee {
    string name;
    string ID;
    string phone;
    string department;
};
Run Code Online (Sandbox Code Playgroud)

以下功能如何工作?

ostream &operator<<(ostream &s, employee &o)
{
 s << o.name << endl;
 s << "Emp#: " << o.ID << endl;
 s << "Dept: " << o.department << endl;
 s << "Phone: " << o.phone << endl;

 return s;
}
Run Code Online (Sandbox Code Playgroud)

cout << e;生成给定的格式化输出employee e.

示例输出:

Alex Johnson
Emp#: 5719
Dept: Repair
Phone: 555-0174
Run Code Online (Sandbox Code Playgroud)

我无法理解ostream功能是如何工作的.它如何获得参数"ostream&s"?它如何重载"<<"运算符以及<<运算符如何工作?如何用它来写出关于员工的所有信息?有人可以用外行的话回答这些问题吗?

c++

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

在valarray上,STL算法"count"的返回类型是什么

我使用的是Visual Studio 2010 Pro一个上Windows 7 64bit机,我想使用count(从<algorithm>上头)valarray:

int main()
{

  valarray<bool> v(false,10);
  for (int i(0);i<10;i+=3)
         v[i]=true;

  cout << count(&v[0],&v[10],true) << endl;

  // how to define the return type of count properly?
  // some_type Num=count(&v[0],&v[10],true); 
}
Run Code Online (Sandbox Code Playgroud)

上面程序的输出是正确的:

4
Run Code Online (Sandbox Code Playgroud)

但是,我想将值赋给变量,并int在编译器警告中使用有关精度损失的结果.由于valarray没有迭代器,我无法弄清楚如何使用iterartor::difference_type.

这有点可能吗?

c++ iterator valarray

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

{} vs.()类成员的初始化

我不明白为什么下面的代码编译?

struct A{ A(int); }; struct B{ A a{1}; };
Run Code Online (Sandbox Code Playgroud)

但这不是:

struct A{ A(int); }; struct B{ A a(1); };
Run Code Online (Sandbox Code Playgroud)

错误:在数字常量之前预期','或'...'

是否有某些原因编译器不接受第二种形式?我知道最令人烦恼的解析歧视,但我认为这个问题是相关的.

编辑:正如Bo在下面的评论中解释的那样,我错了.现在的问题关系到伤脑筋解析毕竟.

我在gcc-5.1.0上用--std = c ++ 11尝试了这个

c++ gcc initialization c++11

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

在C++中用cout递增和递减

我是C++的新手,研究增量和减量运算符.所以我尝试了这个例子:

    int x = 4;    
    cout << ++x << "    " << x++ << "    " << x++ << endl << endl;
    cout << x << endl;
Run Code Online (Sandbox Code Playgroud)

它在C++ .NET和QtCreator以及5个在线C++编译器上返回这个奇怪的输出:

7    5    4

7
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我希望是这样的:

5    5    6

7
Run Code Online (Sandbox Code Playgroud)

你能解释一下会发生什么吗

c++ cout increment decrement

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

整数除法(1/n)的结果总是向下舍入到0.000

我写了一个简单的程序,它读取一个整数number并打印:1 / number.

我不明白为什么输出总是:0.000.

void main()
{
    int n = 0;
    scanf("%d",&n);

    float f = 1 / n;
    printf("%f",f);
}
Run Code Online (Sandbox Code Playgroud)

c

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