我最近发现了Vim的Ctrl+ E和Ctrl+ Y快捷键,分别用一行步骤上下移动屏幕,而不移动光标.
你知道任何将光标留在原处的命令,但是移动屏幕使得有光标的线成为第一行吗?(拥有最后一行的命令将是一个很好的奖励).
我可以通过手动按Ctrl+ E(或Ctrl+ Y)适当的次数来实现这一点,但是有一个命令以某种方式直接这样做会很好.
有任何想法吗?
像许多人一样,我一直在尝试C + 11带来的不同功能.我最喜欢的一个是"基于范围的循环".
我明白那个:
for(Type& v : a) { ... }
Run Code Online (Sandbox Code Playgroud)
相当于:
for(auto iv = begin(a); iv != end(a); ++iv)
{
Type& v = *iv;
...
}
Run Code Online (Sandbox Code Playgroud)
而这begin()只是返回a.begin()标准容器.
但是,如果我想让我的自定义类型"基于范围的循环" - 意识到什么?
如果我只是专注begin()和end()?
如果我的自定义类型属于命名空间xml,我应该定义xml::begin()还是std::begin()?
简而言之,这样做的准则是什么?
我有一个自定义容器类,我想写它iterator和const_iterator类.
我之前从未这样做过,但我找不到合适的方法.关于迭代器创建的指导原则是什么,我应该注意什么?
我也想避免代码重复(我觉得const_iterator并iterator分享很多东西;应该是另一个子类吗?).
脚注:我很确定Boost有什么可以缓解的,但我不能在这里使用它,因为很多愚蠢的原因.
我的GUI项目Qt有很多"配置页面"类,它们都直接从中继承QWidget.
最近,我意识到所有这些类共享2个公共插槽(loadSettings()和saveSettings()).
对此,我有两个问题:
BaseConfigurationPage用这两个插槽作为虚拟纯方法编写一个中间基本抽象类(让它命名)是否有意义?(每个可能的配置页面总是有这两种方法,所以我会说"是")这是一个描述所有内容的代码示例:
class BaseConfigurationPage : public QWidget
{
// Some constructor and other methods, irrelevant here.
public slots:
virtual void loadSettings() = 0;
virtual void saveSettings() = 0;
};
class GeneralConfigurationPage : public BaseConfigurationPage
{
// Some constructor and other methods, irrelevant here.
public slots:
void loadSettings();
void saveSettings();
};
Run Code Online (Sandbox Code Playgroud) 在我的一个程序中,我必须与一些可用的遗留代码进行交互const char*.
可以说我的结构看起来像:
struct Foo
{
const char* server;
const char* name;
};
Run Code Online (Sandbox Code Playgroud)
我的高级应用程序只处理std::string,所以我想用std::string::c_str()回来const char*指针.
但是它的寿命是c_str()多少?
我可以做这样的事情而不面对未定义的行为吗?
{
std::string server = "my_server";
std::string name = "my_name";
Foo foo;
foo.server = server.c_str();
foo.name = name.c_str();
// We use foo
use_foo(foo);
// Foo is about to be destroyed, before name and server
}
Run Code Online (Sandbox Code Playgroud)
或者我应该立即将结果复制c_str()到另一个地方?
谢谢.
Python中是否有内置函数可以替换(或删除)文件扩展名(如果有的话)?
例:
print replace_extension('/home/user/somefile.txt', '.jpg')
Run Code Online (Sandbox Code Playgroud)
在我的例子中:/home/user/somefile.txt将成为/home/user/somefile.jpg
我不知道它是否重要,但我需要这个我正在编写的SCons模块.(所以也许我可以使用一些SCons特定的功能?)
我想要干净的东西.对字符串中的所有实例进行简单的字符串替换.txt显然不是很干净.(如果我的文件名是这会失败somefile.txt.txt.txt)
今天我和我的一个朋友进行了讨论,我们就"编译器优化"进行了几个小时的讨论.
我辩护说,有时,编译器优化可能会引入错误或至少是不良行为.
我的朋友完全不同意,他说"编译器是由聪明人构建并做聪明的东西",因此永远不会出错.
他根本没有说服我,但我不得不承认我缺乏现实生活中的例子来强化我的观点.
谁在这?如果是的话,您是否有任何现实生活中的例子,编译器优化会在生成的软件中产生错误?如果我错了,我应该停止编程并学习钓鱼吗?
我正在研究memcache协议的实现,在某些点上,它使用64位整数值.这些值必须以"网络字节顺序"存储.
我希望有一些uint64_t htonll(uint64_t value)功能可以进行更改,但不幸的是,如果它存在,我找不到它.
所以我有1或2个问题:
我想到了一个基本的实现,但我不知道如何在编译时检查字节序以使代码可移植.所以你的帮助非常受欢迎;)
谢谢.
这是我写的最终解决方案,感谢Brian的解决方案.
uint64_t htonll(uint64_t value)
{
// The answer is 42
static const int num = 42;
// Check the endianness
if (*reinterpret_cast<const char*>(&num) == num)
{
const uint32_t high_part = htonl(static_cast<uint32_t>(value >> 32));
const uint32_t low_part = htonl(static_cast<uint32_t>(value & 0xFFFFFFFFLL));
return (static_cast<uint64_t>(low_part) << 32) | high_part;
} else
{
return value;
}
}
Run Code Online (Sandbox Code Playgroud) 通过阅读本节,我发现了一种"技术",作者称之为"异常调度程序",允许某人将所有异常处理分组到一个方便的函数中:
void handleException()
{
try {
throw; // ?!
}
catch (MyException& e) {
//...code to handle MyException...
}
catch (YourException& e) {
//...code to handle YourException...
}
}
void f()
{
try {
//...something that might throw...
}
catch (...) {
handleException();
}
}
Run Code Online (Sandbox Code Playgroud)
困扰我的是单一throw;陈述:如果你考虑给定的例子然后肯定,它显然是做什么的:它重新抛出首先陷入的异常f()并再次处理它.
但是,如果我handleException()直接调用它,而不是从一个catch()条款中做到这一点怎么办?有没有指定的行为?
此外,对于奖励积分,throw你知道的还有其他"怪异"(可能不是好词)的使用吗?
谢谢.
我必须编写一个Windows服务,在某些时候处理机密数据(如PIN码,密码等).这些信息需要很短的时间:通常它们几乎立即被发送到智能卡读卡器.
让我们考虑这段代码:
{
std::string password = getPassword(); // Get the password from the user
writePasswordToSmartCard(password);
// Okay, here we don't need password anymore.
// We set it all to '\0' so it doesn't stay in memory.
std::fill(password.begin(), password.end(), '\0');
}
Run Code Online (Sandbox Code Playgroud)
现在我关心的是编译器优化.在这里,编译器可能会检测到密码即将被删除,并且此时更改其值是无用的,只需删除该调用即可.
我不希望我的编译器关心未来未引用的内存的价值.
我的担忧是否合法?我怎么能确定这样的代码不会被优化?