我在阅读一些源代码时发现了这一点.
#define MACRO(x) if((void) 0, (x)); else some_func();
Run Code Online (Sandbox Code Playgroud)
我不完全理解操作符逗号和void转换背后的原因.这可能与宏保护有关,我知道(void)0有时用来保护else宏中的级联,例如in if(...) then foo(); else (void)0.
为什么运算符逗号有什么想法?
编辑:我开始认为这与猫头鹰有关 (0,0).
我想调整canvas元素的大小,以便在适合其父元素时,无论是<body>("全屏")还是某些<div>(例如).这是我的尝试:
// called at each frame
function update() {
var canvasNode = document.getElementById('mycanvas');
canvasNode.width = canvasNode.parentNode.clientWidth;
canvasNode.height = canvasNode.parentNode.clientHeight;
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,帆布不会停止增长!也许client*不是正确的参数?
请参阅此处的代码:http: //jsfiddle.net/ARKVD/24/
假设一些数据结构:
typedef struct {
std::string s;
int i;
} data;
Run Code Online (Sandbox Code Playgroud)
如果我在类型映射中data.s添加实例时使用该字段作为键,那么字符串是否会被复制?擦除地图元素是否安全,因为引用将变为无效?datastd::map<std::string&, data>
这些问题的答案也适用于unordered_map?
编辑:
这是我目前的解决方案......但是向地图添加迭代器是UGLY:
typedef struct {
const std::string* s;
int i;
} data;
std::map<std::string, data> map;
typedef std::map<std::string, data>::iterator iterator;
// add an element to the map
iterator add_element(const std::string& s) {
std::pair<iterator, bool> p = states.insert(std::make_pair(s, data()));
iterator i = p.first;
if(p.second) {
data& d = (*i).second;
d.s = &(*i).first;
}
return i;
}
Run Code Online (Sandbox Code Playgroud) 我对C++中的构造和初始化顺序保证有些怀疑.例如,下面的代码有四个班X,Y,Z和W.main函数实例化一个对象class X,该对象包含一个对象class Y,并从中派生出来class Z,因此将调用两个构造函数.另外,const char*传递给X构造函数的参数将被隐式转换为对象class W,因此W也必须调用构造函数.
C++标准对复制构造函数的调用顺序有什么保证?或者,等效地,该程序可以打印什么?
#include <iostream>
class Z {
public:
Z() { std::cout << "Z" << std::endl; }
};
class Y {
public:
Y() { std::cout << "Y" << std::endl; }
};
class W {
public:
W(const char*) { std::cout << "W" << std::endl; }
};
class X : public Z {
public:
X(const W&) …Run Code Online (Sandbox Code Playgroud) 在模板duck-typing和纯虚基类继承之间进行选择的指导原则是什么?例子:
// templates
class duck {
void sing() { std::cout << "quack\n"; }
};
template<typename bird>
void somefunc(const bird& b) {
b.sing();
}
// pure virtual base class
class bird {
virtual void sing() = 0;
};
class duck : public bird {
void sing() { std::cout << "quack\n"; }
}
void somefunc(const bird& b) {
b.sing();
}
Run Code Online (Sandbox Code Playgroud) 我如何用Qt播放声音?我试过这个:
QSound::play("sounds/croack.wav");
Run Code Online (Sandbox Code Playgroud)
QSound在我的ubuntu上不起作用(似乎它需要NAS,虽然在我安装之后它仍然无效).有一个简单的单行Qt解决方案还是我需要投入SDL或其他东西?
我试图在LaTeX中排版一些东西,我想知道我是否正确行事.基本思想是节号悬挂在左边距.对于章节标题,该数字采用标题+ 2行的高度,对于子标题采用+1行,并且与子部分的标题具有相同的高度,并且与标题的顶部对齐.请参阅下图以了解我在说什么:
http://img62.imageshack.us/img62/8404/bladld.png
我的方法是使用titlesec并做这样的事情:
\titleformat{\chapter}%
{\Huge\bfseries\sffamily}% format
{\vbox to 16pt{\llap{% label
\fontsize{3em}{0}\selectfont{\thechapter}%
\hskip 9pt%
}}}%
{0pt}% horizontal sep
{}% before
\titlespacing*{\chapter}%
{0pt}% left
{-2em}% before
{0pt}% after
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案有一些我宁愿避免的黑客攻击.该\vbox例如高度,通过反复试验才发现.在视觉上,它看起来几乎是正确的......
好的,这个问题是关于便携式的,因为没有依赖关系(即"我可以将二进制文件放在USB密钥中,随身携带,发送给朋友等等").
我听说过静态连接,但我很困惑它的后果是什么; 什么可以和什么不能静态链接(即Qt,OpenGL,libstdc ++怎么样?)以及之后二进制将"可移植"的程度.
我也听说过LSB(Linux标准基础版),但我不确切地知道它是什么,或者它在这个意义上是否有帮助.
一些boost库只是标题库,有些不是,并且由于各种原因等.
是否有特定的原因/设计决定为什么Boost.ProgramOptions不是标题?
我想知道因为它声称它的文档中是一个"小"库,我没有看到任何与系统相关的原因(如线程或asio).
c++ ×6
audio ×1
base-class ×1
boost ×1
canvas ×1
constructor ×1
dom ×1
header-only ×1
html5 ×1
html5-canvas ×1
inheritance ×1
javascript ×1
latex ×1
macros ×1
map ×1
mutex ×1
portability ×1
pthreads ×1
pure-virtual ×1
qt ×1
reference ×1
semaphore ×1
templates ×1
typesetting ×1