小编Eva*_*ran的帖子

GDB - 什么是神秘的汇编代码?

Dump of assembler code for function main:
   0x0804833e <+0>:     push   %ebp
   0x0804833f <+1>:     mov    %esp,%ebp
   0x08048341 <+3>:     sub    $0x8,%esp
   0x08048344 <+6>:     and    $0xfffffff0,%esp
   0x08048347 <+9>:     mov    $0x0,%eax
   0x0804834c <+14>:    add    $0xf,%eax
   0x0804834f <+17>:    add    $0xf,%eax
   0x08048352 <+20>:    shr    $0x4,%eax
   0x08048355 <+23>:    shl    $0x4,%eax
   0x08048358 <+26>:    sub    %eax,%esp
=> 0x0804835a <+28>:    movl   $0x10,-0x4(%ebp)
   0x08048361 <+35>:    movl   $0x0,-0x8(%ebp)
   0x08048368 <+42>:    pushl  -0x4(%ebp)
   0x0804836b <+45>:    call   0x8048334 <myfunc1 at test.c:4>
   0x08048370 <+50>:    add    $0x4,%esp
   0x08048373 <+53>:    pushl  -0x8(%ebp)
   0x08048376 <+56>:    call   0x8048339 <myfunc2 …
Run Code Online (Sandbox Code Playgroud)

c c++

4
推荐指数
2
解决办法
4902
查看次数

SFINAE构造师

我一直喜欢这样的SFINAE语法功能,似乎一般都运行良好!

template <class Integer, class = typename std::enable_if<std::is_integral<Integer>::value>::type>
T(Integer n) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是当我想在同一个班级做同样的事情时,我遇到了一个问题......

template <class Float, class = typename std::enable_if<std::is_floating_point<Float>::value>::type>
T(Float n) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

得到如下错误:

./../T.h:286:2: error: constructor cannot be redeclared
        T(Float n) {
        ^
./../T.h:281:2: note: previous definition is here
        T(Integer n) {
        ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

这些构造函数不应只存在于适当的类型而且不能同时存在吗?他们为什么会有冲突?

我在这里有点厚吗?

另一方面,这确实有效(但我不喜欢语法):

template <class Integer>
T(Integer n, typename std::enable_if<std::is_integral<Integer>::value>::type* = nullptr) {
}

template <class Float>
T(Float n, typename std::enable_if<std::is_floating_point<Float>::value>::type* = nullptr) {
}
Run Code Online (Sandbox Code Playgroud)

c++ sfinae

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

C++ std :: string构造函数

任何有关这方面的想法将不胜感激:

std::string s1 = "hello";
std::string s2 = std::string(s1);
Run Code Online (Sandbox Code Playgroud)

我现在期望这两个字符串是独立的,即我可以将",world"附加到s2,而s1仍然会读取"hello".这是我在Windows和Linux上发现的但是在HP_UX机器上运行代码似乎s2和s1是相同的字符串,所以修改s2会改变s1.

这听起来绝对疯狂,有人见过类似的东西吗?

c++ hp-ux stdstring

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

交换工会的正确方法?

我有一个班级,其中有一个联盟作为其成员之一.我也是复制/交换习语的忠实粉丝.在我看来,交换工会似乎没有任何正确的(在标准意义上)!

这是我能想到的最好的:

char tmp[sizeof(U)];
memcpy(tmp, &u1, sizeof(U));
memcpy(&u1, &u2, sizeof(U));
memcpy(&u2, tmp, sizeof(U));
Run Code Online (Sandbox Code Playgroud)

由于工会(至少在c ++ 03中)要求所有成员都是POD,我不明白为什么这不起作用.但它感觉不对.交换工会有更正确的方法吗?它似乎几乎被忽视了.

你们有什么感想?

编辑:

好的,看到给出的解决方案后,我觉得有点愚蠢:-).我写下了传统的解决方案,比如std::swap和分配,因为当我第一次编写代码时,联合是一个匿名联盟.在当前版本的代码中,联合不再是匿名的,传统的解决方案似乎工作得很好.谢谢.

c++ swap unions

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

来自指针的shared_ptr

我有一个无法在堆上创建的类,它有私有析构函数.

但是有一个函数返回指向这种构造对象的指针.我想从它做一个共享指针:

MyClass *GetMyClassPointer() {...}

boost::shared_ptr<MyClass> ptr;
ptr = boost::shared_ptr<MyClass>(GetMyClassPointer()); // [x]
Run Code Online (Sandbox Code Playgroud)

错误:'MyClass :: ~MyClass()'是私有的

无论如何?

c++ boost pointers shared-ptr

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

在HTML电子邮件中删除图像上的蓝色边框

我试图发送HTML电子邮件,我有这段代码:

<a href="#">UP &nbsp;;<img src="arrow.png" /></a></div>
Run Code Online (Sandbox Code Playgroud)

但是我的图像周围有一个蓝色的边框.我怎么能摆脱它.谢谢.

html css html-email

3
推荐指数
2
解决办法
2万
查看次数

mongo dot符号模糊

我喜欢MongoDB,并且发生了一些小的模糊性,我想知道是否有人之前已经看过这个并且可能会知道答案:-).

在mongo中,为了达到子对象,你使用点符号,例如:

db.persons.find({ "address.state" : "CA" })
Run Code Online (Sandbox Code Playgroud)

这很简单.如何(如果它完全没有)mongo处理之间的区别:

{
    "address" { "state" : "CA" }
}
Run Code Online (Sandbox Code Playgroud)

{
    "address.state" : "CA"
}
Run Code Online (Sandbox Code Playgroud)

因为据我所知,点在键中是合法的.此外,我相信这也是一个法律文件:

{
    "address" { "state" : "A" },
    "address.state" : "B"
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以看到此查询返回"A""B":

db.persons.find({}, {"address.state"}) // all docs selecting address.state as result.
Run Code Online (Sandbox Code Playgroud)

类似的潜在问题也可能出现在我想象的阵列中:

{"a":["test"]}
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式访问:

{"a.0"}
Run Code Online (Sandbox Code Playgroud)

而且当然

{"a" {"0" : "test"} }
Run Code Online (Sandbox Code Playgroud)

也可以访问:

{"a.0"}
Run Code Online (Sandbox Code Playgroud)

想法?经验?传统智慧根本就不是这样做的吗?

syntax mongodb mongodb-query

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

宏观问题

在一个软件项目(一些旧的C编译器)上,我们有很多变量必须保存正常和反转.

有人知道如何制作这样的宏吗?

SET(SomeVariable, 137);
Run Code Online (Sandbox Code Playgroud)

哪个会执行

SomeVariable = 137;
SomeVariable_inverse = ~137;
Run Code Online (Sandbox Code Playgroud)

编辑:

最好的解决方案似乎是:

#define SET(var,value) do { var = (value); var##_inverse = ~(value); } while(0)
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答

c macros

2
推荐指数
2
解决办法
599
查看次数

QPainter彩色文字(语法着色)

我有一个自定义的Qt小部件,我用来显示反汇编,我希望添加语法着色.

目前,我只是将其设置QPen为纯色,构造我想要显示的文本,并将其渲染到QPainter适当的坐标.

问题是,添加语法着色的最佳方法是什么?我想到了一些:

  1. 我可以简单地将着色分成逻辑块,每个块之前都将QPen设置为所需的颜色.
  2. 我可以使用特殊的转义字符来表示调色板中的更改,并一次渲染1个字符.
  3. 我可以对#1进行修改并创建一个列表std::pair<QColor, QString>,然后我可以简单地迭代列表设置颜色并绘制文本,因为我从列表的前面弹出项目.
  4. 完全不同的东西?

我知道我列出的3种方法中的每一种都在技术上有效,但我正在寻找一种非常有效的解决方案.这段代码将被大量调用.由于这是一个交互式调试器,如果此代码速度很慢,快速踩踏或跟踪的人会看到明显的减速.

编辑:我知道QSyntaxHighlighterQTextDocument.主要问题是这些通常不能很好地满足我的目的.我有几个列都有分隔线,可以来回滑动.为了给你一个想法,这是我的调试器截图的链接.正如您所看到的,它根本不像文本文档.实际上它更接近列表或表格.但是已经有一堆定制绘图正在进行,使得正常QTextDocument有点不切实际.

编辑:我是不正确的,似乎QTextDocument可以直接渲染到QPainter.看起来像我需要的!

编辑:目前还不清楚如何控制在哪里,如何QTextDocumentQTextLayout将绘制QPainter.我试图用它们无济于事.因此,如果有人可以提供一个基本的例子,那将非常有帮助.

编辑:我最终能够得到我想要的东西,使用这样的东西:

painter.setPen(default_color);
QTextDocument doc;
doc.setDefaultFont(font());
doc.setDocumentMargin(0);
doc.setPlainText(text);
highlighter_->setDocument(&doc);

painter.save();
painter.translate(x, y);
QAbstractTextDocumentLayout::PaintContext context;
context.palette.setColor(QPalette::Text, painter.pen().color());
doc.draw(&painter, context);
painter.restore();
Run Code Online (Sandbox Code Playgroud)

c++ qt syntax-highlighting qpainter

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

putc和ungetc有什么区别?

int ungetc(int c, FILE *fp)将字符c推回fp,并返回c或EOF错误.

其中int putc(int c, FILE *fp)将字符c写入文件fp并返回写入的字符,或者返回EOF错误.

//这些是K&R的陈述.我发现自己很困惑,因为putc()可以在以后使用getc并且可以工作ungetc.那么具体定义的用途是什么ungetc().

c c++ function

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