标准库将std :: hash实现为专门用于不同类型的模板结构.它是这样使用的:
#include <iostream>
#include <functional>
int main()
{
std::hash<int> hasher;
std::cout << hasher(1337) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是这种设计选择背后的原因是什么.为什么它没有实现为模板函数并像这样使用:
#include <iostream>
#include <functional>
int main()
{
std::cout << std::hash<int>(1337) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在内核端很容易设置内存障碍:由于Linux内核头文件,宏mb,wmb,rmb等总是存在.
如何在用户端完成此操作?
应用程序运行时,我按HOME按钮关闭应用程序.当我再次启动应用程序时,它会在单击HOME之前显示的页面上恢复.我希望应用程序从初始显示开始.我已经使用finish()来完成活动,但它无法正常工作.有什么建议?
我有这样的功能:
#include <setjmp.h>
jmp_buf buf;
void func2(int g);
extern int some_global;
void func(int x)
{
if (setjmp(buf))
return;
if (some_global)
x += 5;
func2(x);
}
Run Code Online (Sandbox Code Playgroud)
GCC(gcc(Debian 4.4.5-8)4.4.5)发出警告:
test.c: In function ‘func’: test.c:5: warning: argument ‘x’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
为什么????我的意思是,显然我不在乎是否x被破坏,因为它不可能在setjmp返回后使用.即使编译器应该知道一些非常明显的东西,因为它具有某种特殊的知识setjmp.
我的主要兴趣是找到我继承的代码库中的错误,因此,"使用这种编码风格"并不是我正在寻找的建议.然而,这里有许多奇怪的曲折.例如,如果x是局部变量而不是参数,那么GCC不会抱怨.此外,GCC不会在没有if (some_global)线的情况下抱怨.尼斯.有些事情搞砸了GCC的流量分析,或者GCC知道我不知道的事情.
所以,
是否有一种简单的方法来抑制此函数的此警告,就像您可以将未使用的参数转换为(void)?
或者我只是在项目范围内禁止警告?
或者我错过了什么?
更新:让我与您分享一个不会产生警告的略有不同的版本:
#include <setjmp.h>
jmp_buf buf;
void func2(int g);
extern int some_global;
void func(int …Run Code Online (Sandbox Code Playgroud) 对于常规类型,我的意思是在编程元素中Stepanov的定义,基本上,存在相等的概念,并且彼此复制的对象相等.
所以当你有一个Regular Type T,并且相等关系是可传递的(a == b && b == c => a == c)时,你可以定义一个(非平凡的)哈希函数,它与定义一致相等(a == b => h(a)== h(b)).总是.
但该标准不包括许多std::hash专业化.例如std::complex,没有一个,也没有容器,除了vector<bool>和的明显例外bitset.
所以我想知道这里的设计原理是什么.
或者,提出不同的问题:是否有理由不std::hash为您自己的类型提供专业化,只要它们是规则的并且平等是可传递的?
有没有人有一个Delphi 7清单文件的例子,允许应用程序在Windows XP/Vista/7上以管理员身份运行?
使用此功能运行应用程序通常会导致用户帐户控制(UAC)对话框询问特权权限.
我正在调用一个在我的控制台/标准输出中打印一些字符串的函数.我需要捕获这个字符串.我不能修改正在进行打印的函数,也不能通过继承来改变运行时行为.我无法找到任何允许我这样做的预定义方法.
JVM是否存储打印内容的缓冲区?
有谁知道有助于我的Java方法?
我正在编写一个小命令行实用程序,其目的是解析另一个实用程序的输出.我希望它可以通过两种方式调用:
c:\> myutility filewithoutput.txt
Run Code Online (Sandbox Code Playgroud)
要么,
c:\> otherutility -args | myutility
Run Code Online (Sandbox Code Playgroud)
所以,基本上,标准或文件参数.我对此的第一次尝试看起来像这样:
TextReader reader;
if (args.Length > 1) {
reader = new StreamReader(new FileStream(args[1], FileMode.Open));
} else {
reader = Console.In;
}
Process(reader);
Run Code Online (Sandbox Code Playgroud)
文件参数工作正常,并将实用程序的输出传递给我的实用程序工作正常,但如果您只是正常调用它(没有参数和没有管道数据),它会挂起.或者说,它阻止等待从标准读取.
我的第二稿看起来像这样:
TextReader reader;
if (args.Length > 1) {
reader = new StreamReader(new FileStream(args[1], FileMode.Open));
} else {
if(Console.KeyAvailable) {
reader = Console.In;
} else {
Console.WriteLine("Error, need data");
return;
}
}
Process(reader);
Run Code Online (Sandbox Code Playgroud)
虽然KeyAvailable修复了"无输入"问题,但如果您尝试管道数据> _ <,则会引发异常
Unhandled Exception: System.InvalidOperationException: Cannot see if a key
has been …Run Code Online (Sandbox Code Playgroud) 我知道散列无限数量的字符串到32b int必须生成碰撞,但我期望从散列函数中得到一些不错的分布.
这两个字符串具有相同的哈希值是不是很奇怪?
size_t hash0 = std::hash<std::string>()("generated_id_0");
size_t hash1 = std::hash<std::string>()("generated_id_1");
//hash0 == hash1
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用boost::hash<std::string>或其他人,但我想知道什么是错的std::hash.我用错了吗?我不应该以某种方式"播种"它吗?
#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
Run Code Online (Sandbox Code Playgroud)
我使用上面显示的标题.在Boost官方网站上找不到帮助.