小编Mar*_*utz的帖子

为什么std :: hash是一个struct而不是一个函数?

标准库将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)

c++ std c++-standard-library c++11 stdhash

18
推荐指数
2
解决办法
9156
查看次数

用户空间中的内存障碍?(Linux,x86-64)

在内核端很容易设置内存障碍:由于Linux内核头文件,宏mb,wmb,rmb等总是存在.

如何在用户端完成此操作?

c c++ multithreading lock-free memory-barriers

17
推荐指数
2
解决办法
1万
查看次数

如何破坏Android中的活动?

应用程序运行时,我按HOME按钮关闭应用程序.当我再次启动应用程序时,它会在单击HOME之前显示的页面上恢复.我希望应用程序从初始显示开始.我已经使用finish()来完成活动,但它无法正常工作.有什么建议?

android

17
推荐指数
1
解决办法
8万
查看次数

这些破坏性变量警告有何意义?

我有这样的功能:

#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)

c gcc warnings longjmp

17
推荐指数
2
解决办法
6137
查看次数

C++ 11:有没有理由为什么一些常规类型不应该有`std :: hash`专用?

对于常规类型,我的意思是在编程元素中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为您自己的类型提供专业化,只要它们是规则的并且平等是可传递的?

c++ hash regular-type stdhash

16
推荐指数
1
解决办法
243
查看次数

Delphi 7 vista/windows 7清单

有没有人有一个Delphi 7清单文件的例子,允许应用程序在Windows XP/Vista/7上以管理员身份运行?

使用此功能运行应用程序通常会导致用户帐户控制(UAC)对话框询问特权权限.

delphi uac manifest delphi-7

15
推荐指数
3
解决办法
2万
查看次数

在Java中捕获标准输出的内容

我正在调用一个在我的控制台/标准输出中打印一些字符串的函数.我需要捕获这个字符串.我不能修改正在进行打印的函数,也不能通过继承来改变运行时行为.我无法找到任何允许我这样做的预定义方法.

JVM是否存储打印内容的缓冲区?

有谁知道有助于我的Java方法?

java stdout println

15
推荐指数
3
解决办法
2万
查看次数

检查C#中的标准输入

我正在编写一个小命令行实用程序,其目的是解析另一个实用程序的输出.我希望它可以通过两种方式调用:

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)

.net c# console stdin

14
推荐指数
2
解决办法
7014
查看次数

与std :: hash发生意外冲突

我知道散列无限数量的字符串到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.我用错了吗?我不应该以某种方式"播种"它吗?

c++ hash visual-studio-2010 hash-collision stdhash

14
推荐指数
2
解决办法
7693
查看次数

如何使用boost lib编译c ++代码?在Ubuntu上

#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官方网站上找不到帮助.

c++ ubuntu boost

12
推荐指数
1
解决办法
2万
查看次数