今天早上我设法通过以下方式射击自己:
幸运的是,在这种情况下,我在星期五离开工作之前做了一个"svn diff> temp.txt",而temp.txt文件仍然在我的硬盘上,所以我能够将该文件输入"补丁"并恢复我的失去了变化.
但是对于我将来的参考(即下次我犯同样的愚蠢错误)...有没有办法告诉svn撤消"svn revert"?svn是否在任何地方保留本地/未签入差异的备份?
假设我去编译一些编写不佳的C ++源代码,这些源代码会调用未定义的行为,因此(正如他们所说)“任何事情都可能发生”。
从C ++语言规范在“合格”编译器中认为可接受的角度来看,这种情况下的“任何情况”是否包括编译器崩溃(或窃取我的密码,或者在编译时出现异常或错误),或者未定义行为的范围专门限于生成的可执行文件运行时会发生什么?
如果您今天从头开始编写一个新的应用程序,并希望它可以扩展到明天可以使用的所有内核,您会选择哪种并行编程模型/系统/语言/库?为什么?
我对这些轴的答案特别感兴趣:
我故意对应用程序的性质含糊不清,以期获得对各种应用程序有用的良好通用答案.
我有一个充满了QPushButtons和QLabels以及其他各种有趣的QWidgets的窗口,所有这些都是使用各种QLayout对象动态布局的......而我想要做的是偶尔让一些小部件变得不可见.也就是说,隐形窗口小部件仍会占用窗口布局中的正常空间,但它们不会被渲染:相反,用户只会在窗口小部件的矩形/区域中看到窗口的背景颜色.
hide()和/或setVisible(false)不会这样做,因为它们会导致小部件完全从布局中删除,允许其他小部件扩展以占用"新可用"空间; 我想避免的效果.
我想我可以创建一个QWidget覆盖paintEvent()(和mousePressEvent()等)的每个类型的子类为无操作(在适当的时候),但我更喜欢一个不需要我创建三十个不同QWidget子类的解决方案.
我有一些C代码可以解析来自网络的打包/未打包二进制数据.
这段代码在Intel/x86下运行正常,但是当我在ARM下编译它时,它经常会崩溃.
正如您可能已经猜到的那样,罪魁祸首是未对齐的指针 - 特别是,解析代码会做出如下问题:
uint8_t buf[2048];
[... code to read some data into buf...]
int32_t nextWord = *((int32_t *) &buf[5]); // misaligned access -- can crash under ARM!
Run Code Online (Sandbox Code Playgroud)
......显然不会在ARM-land中飞行,所以我修改它看起来更像这样:
uint8_t buf[2048];
[... code to read some data into buf...]
int32_t * pNextWord = (int32_t *) &buf[5];
int32 nextWord;
memcpy(&nextWord, pNextWord, sizeof(nextWord)); // slower but ARM-safe
Run Code Online (Sandbox Code Playgroud)
我的问题(从语言 - 律师的角度来看)是:我的"ARM修复"方法是否在C语言规则下定义明确?
我担心的是,即使只是有一个misaligned-int32_t指针也可能足以调用未定义的行为,即使我从来没有直接取消引用它.(如果我关心的是有效的,我想我可以修复通过改变问题pNextWord从的类型(const int32_t *)来(const char *)的,但我宁愿不这样做,除非它实际上必须这样做,因为这将意味着做手工一些指针跨度计算)
我希望能够在C++中将数组声明为函数参数,如下面的示例代码所示(不编译).有没有办法做到这一点(除了预先单独声明数组)?
#include <stdio.h>
static void PrintArray(int arrayLen, const int * array)
{
for (int i=0; i<arrayLen; i++) printf("%i -> %i\n", i, array[i]);
}
int main(int, char **)
{
PrintArray(5, {5,6,7,8,9} ); // doesn't compile
return 0;
}
Run Code Online (Sandbox Code Playgroud) 这是一些编译和工作正常的C++示例代码:
class A
{
public:
A() {/* empty */}
private:
friend void IncrementValue(A &);
int value;
};
void IncrementValue(A & a)
{
a.value++;
}
int main(int, char **)
{
A a;
IncrementValue(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的是将IncrementValue()声明为static,这样就无法从另一个编译单元看到或调用它:
static void IncrementValue(A & a)
{
a.value++;
}
Run Code Online (Sandbox Code Playgroud)
但是,这样做会给我一个编译错误:
temp.cpp: In function ‘void IncrementValue(A&)’:
temp.cpp:12: error: ‘void IncrementValue(A&)’ was declared ‘extern’ and later ‘static’
temp.cpp:8: error: previous declaration of ‘void IncrementValue(A&)’
Run Code Online (Sandbox Code Playgroud)
...并且更改要匹配的朋友声明无济于事:
friend static void IncrementValue(A &);
Run Code Online (Sandbox Code Playgroud)
...因为它给出了这个错误:
temp.cpp:8: error: storage class specifiers invalid …Run Code Online (Sandbox Code Playgroud) 在IPv6网络中,IPV6_V6ONLY标志用于确保套接字仅使用IPv6,特别是IPv4-to-IPv6映射不会用于该套接字.在许多操作系统上,IPV6_V6ONLY默认情况下未设置,但在某些操作系统(例如Windows 7)上,默认情况下会设置.
我的问题是:引入这面旗帜的动机是什么?是否存在导致问题的IPv4-to-IPv6映射,因此人们需要一种方法来禁用它?在我看来,如果有人不想使用IPv4到IPv6的映射,他们可能根本就没有指定IPv4映射的IPv6地址.我在这里错过了什么?
我用Qt 4.x编写了一个用C++编写的小文件传输应用程序...它登录到服务器,向用户显示服务器上可用的文件列表,并允许用户上传或下载文件.
这一切都很好; 您甚至可以从桌面(或从打开的文件夹)拖入文件,当您将文件图标放入server-files-list-view时,删除的文件将上传到服务器.
现在我也请求相反的操作...我的用户希望能够将文件从server-files-list-view拖到桌面上,或者拖到打开的文件夹窗口中,然后让它文件下载到该位置.
这似乎是一个合理的要求,但我不知道如何实现它.有没有办法让Qt应用程序找到与"drop event"发生位置相对应的目录,当图标被放到桌面上或打开文件夹窗口时?理想情况下,这将是一个基于Qt的平台中立机制,但如果不存在,那么MacOS/X和Windows(XP或更高版本)的平台特定机制就足够了.
有任何想法吗?
这是一个非常简单的C++ 11程序,它测试了final关键字的使用,以防止类被子类化:
template<class T> class Base final
{
public:
Base() {}
private:
T t;
};
class Derived : public Base<int> {};
int main(int, char **)
{
Derived d;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试在Mac OS X(Clang)下编译上述程序,我会收到预期的错误消息:
jeremy-friesners-mac-pro-3:~ jaf$ g++ -std=c++11 ./temp.cpp
./temp.cpp:10:28: error: base 'Base' is marked 'final'
class Derived : public Base<int> {};
^
./temp.cpp:1:29: note: 'Base' declared here
template<class T> class Base final
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用Visual Studio 2013在Windows下编译相同的代码,它将编译没有错误.Base但是,如果我使该类非模板化,Visual Studio会识别该final关键字并发出错误.
这是Visual Studio 2013中的错误,还是我错过了关于如何final允许/期望关键字与模板化类一起操作的一些细微差别?