我试着编译这段代码:
#include <cmath>
double gravity (double level) {
return 0.02 * std::round(level);
}
Run Code Online (Sandbox Code Playgroud)
但海湾合作委员会告诉我:
error: 'round' is not a member of 'std'
Run Code Online (Sandbox Code Playgroud)
我知道我以前round
在ISO C++ 98中多次使用过该功能.与众不同的是,round
与::round
这两个工作.
是什么赋予了?
更新:我正在编译g++ -std=c++98 -Wall -pedantic
.切换到std=c++0x
工作.
但是为什么不合格/匿名round
并且::round
两者都有效std::round
呢?
注意:我static_cast
原来错误地问过; 这就是为什么最重要的答案static_cast
首先提到的原因.
我有一些二进制文件,带有小的字节序浮点值.我想以与机器无关的方式阅读它们.我的字节交换例程(来自SDL)在无符号整数类型上运行.
在整数和浮点数之间简单投射是否安全?
float read_float() {
// Read in 4 bytes.
Uint32 val;
fread( &val, 4, 1, fp );
// Swap the bytes to little-endian if necessary.
val = SDL_SwapLE32(val);
// Return as a float
return reinterpret_cast<float &>( val ); //XXX Is this safe?
}
Run Code Online (Sandbox Code Playgroud)
我希望这个软件尽可能便携.
我知道默认情况下会初始化一些POD变量,但其他变量不是.(POD类型包括int
,float
指针,联合,POD类型的数组,POD类型的结构等)
范围和存储类如何影响POD类型的默认初始化?
具体而言,将隐式初始化以下哪项:
new
我知道存在一些与这些情况有关的问题,但没有全面的问题(它们只涉及具体情况).
我在Bootstrap的所有示例中都注意到了使用button
元素,它们包括role="button"
(和type="button"
),例如:
<div class="dropdown">
<button id="dLabel" type="button" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Dropdown trigger <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
...
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
无法访问的软件是否已经知道某个button
元素是否可以充当按钮?有什么理由我应该包含role="button"
和/或type="button"
在我的代码中?
作为一个爱好,我一直在努力改造旧的视频游戏,我想尽可能避免重新发明轮子.游戏基于GUI,但GUI需要在外观方面进行自定义,并且还需要在几个游戏屏幕上使用3D OpenGL渲染.
为了给你一个想法,这里是最初原型的截图:
使用了大量动画,3D也是如此,但GUI小部件的行为与标准桌面应用程序中的大致相同.
到目前为止,我一直在使用自己的GUI库(它不健壮或完整,我遇到了一些问题).
考虑到它的声誉和令人印象深刻的功能,以及Qt网站上的一些很好的截图,我一直在考虑迁移到Qt.但我之前从未使用过Qt,所以我真的不知道它的功能是什么,或者需要多少时间来学习它.(注意我使用过FLTK).
我的问题是:在这种情况下使用Qt是否可行/可行?
更新:在Qt中模拟一些游戏画面后,我决定不使用它.虽然它支持我开箱即用的许多功能(特别是通过样式表),但我需要支持基于位图的自定义预渲染字体(我无法转换/替换它们).我不能将QFont子类化,或者在未来的Qt版本中重新实现它.也就是说,Qt(它的易用性和良好的文档)给我留下了非常深刻的印象.我将为我自己的引擎借用它的一些功能.感谢所有提供输入的人.
我有一组shell脚本,使用truecrypt和rsync在我的系统上执行备份.我想避免这些各种脚本同时运行的任何可能性.
它们flock
在子shell中使用,如联机帮助页中所述:
(
flock -n 9 || exit 1
# ... commands executed under lock ...
) 9>/var/lock/mylockfile
Run Code Online (Sandbox Code Playgroud)
但是,锁定总是无法获取后续运行(退出状态为1).
然而fuser /var/lock/mylockfile
,lsof /var/lock/mylockfile
什么都不显示.
现在,如果我添加命令flock -u
手动解锁,如下所示:
(
flock -n 9 || exit 1
# ... commands executed under lock ...
flock -u 9
) 9>/var/lock/mylockfile
Run Code Online (Sandbox Code Playgroud)
然后脚本工作.
我使用flock
得当吗?flock -u
在街区内打电话是否安全?
仅供参考这些麻烦的脚本是在命令块中调用truecrypt的脚本.
我正在使用libdis
,来自这个混蛋的x86反汇编程序库,我正试图找出哪些指令访问内存.
参考这两条说明:
mov eax, [ebx + 10]
lea eax, [ebx + 10]
Run Code Online (Sandbox Code Playgroud)
在libdis
,两者都列出了指令类型insn_mov
,并且地址操作数在两种情况下都具有相同的标志.因此,我可以判断是否访问内存的唯一方法是查看指令助记符.
因此我的问题是:LEA是使用内存操作数的唯一指令,它实际上并不访问内存吗?引用的任何链接都很好.
为什么这段代码不能编译?(gcc 4.7.0)
// Class with a simple getter/setter pair.
class Base {
public:
Base () : m_Value(0) { }
virtual ~Base () { }
// Getter
virtual int value () { return m_Value; }
// Setter
virtual void value (int Val) { m_Value = Val; }
private:
int m_Value;
};
// Derived class overrides the setter.
class Derived : public Base {
public:
void value (int Val) {
// do some stuff here...
}
};
int main()
{
Derived * …
Run Code Online (Sandbox Code Playgroud) 我正在重构一些从文件中读取整数容器的代码.我已将公共代码移动到这些流提取器中:
std::istream &operator>>(std::istream &in, std::vector<int> &list);
std::istream &operator>>(std::istream &in, std::map<int, std::vector<int>> &graph);
Run Code Online (Sandbox Code Playgroud)
我的问题是这些函数是否应该在写入之前清除容器,或者只是向它们插入/附加数据.(在我的特定情况下,它没关系,但为了代码重用,我想知道.)
在这些情况下,C++中是否有约定?我正在尝试根据最小惊喜原则进行编码.