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) 我一直喜欢这样的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) 任何有关这方面的想法将不胜感激:
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.
这听起来绝对疯狂,有人见过类似的东西吗?
我有一个班级,其中有一个联盟作为其成员之一.我也是复制/交换习语的忠实粉丝.在我看来,交换工会似乎没有任何正确的(在标准意义上)!
这是我能想到的最好的:
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和分配,因为当我第一次编写代码时,联合是一个匿名联盟.在当前版本的代码中,联合不再是匿名的,传统的解决方案似乎工作得很好.谢谢.
我有一个无法在堆上创建的类,它有私有析构函数.
但是有一个函数返回指向这种构造对象的指针.我想从它做一个共享指针:
MyClass *GetMyClassPointer() {...}
boost::shared_ptr<MyClass> ptr;
ptr = boost::shared_ptr<MyClass>(GetMyClassPointer()); // [x]
Run Code Online (Sandbox Code Playgroud)
错误:'MyClass :: ~MyClass()'是私有的
无论如何?
我试图发送HTML电子邮件,我有这段代码:
<a href="#">UP ;<img src="arrow.png" /></a></div>
Run Code Online (Sandbox Code Playgroud)
但是我的图像周围有一个蓝色的边框.我怎么能摆脱它.谢谢.
我喜欢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)
想法?经验?传统智慧根本就不是这样做的吗?
在一个软件项目(一些旧的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)
谢谢你的回答
我有一个自定义的Qt小部件,我用来显示反汇编,我希望添加语法着色.
目前,我只是将其设置QPen为纯色,构造我想要显示的文本,并将其渲染到QPainter适当的坐标.
问题是,添加语法着色的最佳方法是什么?我想到了一些:
std::pair<QColor, QString>,然后我可以简单地迭代列表设置颜色并绘制文本,因为我从列表的前面弹出项目.我知道我列出的3种方法中的每一种都在技术上有效,但我正在寻找一种非常有效的解决方案.这段代码将被大量调用.由于这是一个交互式调试器,如果此代码速度很慢,快速踩踏或跟踪的人会看到明显的减速.
编辑:我知道QSyntaxHighlighter和QTextDocument.主要问题是这些通常不能很好地满足我的目的.我有几个列都有分隔线,可以来回滑动.为了给你一个想法,这是我的调试器截图的链接.正如您所看到的,它根本不像文本文档.实际上它更接近列表或表格.但是已经有一堆定制绘图正在进行,使得正常QTextDocument有点不切实际.
编辑:我是不正确的,似乎QTextDocument可以直接渲染到QPainter.看起来像我需要的!
编辑:目前还不清楚如何控制在哪里,如何QTextDocument或QTextLayout将绘制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) 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().