小编Grz*_*orz的帖子

std :: multiplies和std :: divides是否有任何理由成为第三人称?

今天,我们发现,对于乘除,仿函数被称为std::multipliesstd::divides,而不是,例如, std::multiplystd::divide分别.

至少可以说这是令人惊讶的,考虑到std::plus并且std::minus没有以相同的方式制定.

差异有特殊原因吗?

c++ library-design

15
推荐指数
1
解决办法
863
查看次数

测试我的程序是否从bash/ksh/csh命令行执行

我想知道我的程序是从命令行执行,还是通过system()调用执行,还是从脚本执行.

我最初想过获取父id(getppid()),并查找/proc/#pppid目录检查文件的exe链接或内容cmdline.如果它是/ bin/bash,或/ bin/csh,或/ bin/sh,我会知道它是从命令行运行的.

问题是它不是真的,因为一个独立的脚本也会告诉我/bin/bash.即使它工作,它可能是非常具体的Linux版本方法,并可能在未来停止工作.

有没有更好的方法呢?

感谢您提出任何建议或指出某些方向.

c linux

5
推荐指数
1
解决办法
333
查看次数

如何将内核陷阱划分错误rsp:2b6d2ea40450转换为源位置?

客户报告我们的一个程序由于除零而导致错误.我们只有这个VLM系列:

kernel: myprog[16122] trap divide error rip:79dd99 rsp:2b6d2ea40450 error:0 
Run Code Online (Sandbox Code Playgroud)

我不相信有核心文件.

我通过互联网搜索了一下,我怎么能告诉导致这种除法的程序行为零,但到目前为止,我失败了.

我知道16122是程序的pid,所以这对我没有帮助.

我怀疑rsp:2b6d2ea40450与导致错误的行的地址(0x2b6d2ea40450)有关但是这是真的吗?

如果是,那么我怎样才能将它转换为源中的物理大致位置,假设我可以将myprog的调试版本加载到gdb中,然后请求显示该地址周围的上下文...

任何,任何帮助将不胜感激!

linux debugging gdb divide-by-zero

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

如何从gpg密钥获取到期日期

以下是由gpg --armor --export heinrichh@duesseldorf.de(从gpg man; 取得的电子邮件)生成的导出的公共gpg密钥

我如何从该密钥获取到期日期?是否有可用的开放项目,或者我可以使用的功能?

我知道我可以执行gpg --list-keys搜索,heinrichh@duesseldorf.de但是我的问题是我得到了以下格式的密钥,因此需要将这些信息提取到该数据中。

我已经使用基于gpg rfc规范的反向工程从中读取了用户名,但是这次我宁愿寻找比“自制”方法更好的方法。

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (SunOS)

mQGiBFqNy1sRBADnegXzBpsnDgSudhj5S4+Lv0rwHHcJDg0nxHPf2KaefXnytzhm
tf/43xQaaPUpIg2UMV2qhdA9qczMlqe6llz7sQbi4v0QTuOPSx2EcKb364TcsG5K
RO180ghq0RmeK+EDfCn8i5aPfGucaPXpUJ9ZaRaJmEWlv57eymPEW+FAVwCgmATR
w4bcPZWyUMaO/MsB4+IA1zkEALB60PN8sA1mFyf0z9mlXYoP/T68pAHFMWd+NNcB
K7+BmHZEhTUEUwB1pfO/s6AurSCAFHUmhM2S9VBkci+EuyFVCkorZbbjCdZ3Nim5
KojcIL319mbYNyfzVkxLLbrHaSvax7xmyLY7HfXEYyJskR6fk4zB7er4VKDIh1gZ
G9T/A/9j1FslL0sBZ2YfcDVWpfofoX2hxW9Y0ihxHGpVtwcOd90RFXEt1jjDP2O2
iPkseTpxT2bG9qGK89YymKZjNnXKxZoYG0Y1peiHL4dX4EeEkGS72MWLwCUupuxh
w4MzH7mgtAV4UxXm2WjomWX8aZqJ5YQ4Cnxs0f6zcDnTSj8DvLQwSGVpbnJpY2gg
SGVpbmUgKHRlc3QpIDxoZWlucmljaGhAZHVlc3NlbGRvcmYuZGU+iGUEExECACUF
AlqNy1sCGwMFCQABUYAGCwkIBwMCBBUCCAMDFgIBAh4BAheAAAoJECAy3dUnZnUw
6BUAn1ikxbVvcJ6vaARftyK/Uw6Zw9WKAJwPgbcy02HMvtjQCaCtusLl12ZdLLkC
DQRajctbEAgA1YU+9LWaSdInlCMaF639qaE8bv3JK2DbNj/0v+QwmQT81Jp6U37j
XbU+zA85nw96zwjBDz9ACg3jtQlrbg7e+ooJQMzCVYkkIJH8mkQi8JYswLFFaKRp
dJy43Gyx+ehbOT5FGfeX8VoAbuDhBJKtssmH/EEz9hYLLLZ8me88onnNOWCAAWF+
bOJSemRMppY5f9nQwUMk7uG5yv9Wk/E98w+evow10bhWs3cyCxvT6IHQSGS0m+iC
vCDhaSRy+cRf+GRqy/LyUb4z7Q4TZRrcE/X3xY7FW8/iNSlkv5oMjpFoaYBpSzkE
vdXsdOJQVZHnefkUDXTMl7OPWX9RyX1CbwADBQgAh+Bsn7lin/z8WIDIwlo7B7ag
p8YzFeJqsyPxP2I9a36mVrHOopXHotMMCPBF9lm227vXwB+z8fKoujzd9himVspo
fMA5GGvPHEya4ldha+3ChJTNgErZfkczzbcoP6YLmxI+kfW/OwjTq0Ivi0afhChR
vhb/N+hXoVcGm9ciA9xnoGE0+hZpzf5iF/SiL/T4wkCQy68PoCHxzrxWAnaqqldV
nYBEG5mUzrvqYb2iKWf24qt34og5GV4mrlNPSuvj7faE1BQe5JgEIhr8TS9Secnc
qQGJPh/+afK4Y8kl4CvQq3/BQddoFKgZdmUgaIBZN/fDqWwGfWLVx0mWXQgEbIhP
BBgRAgAPBQJajctbAhsMBQkAAVGAAAoJECAy3dUnZnUwNIwAn3+A5rGyGNZBD5qT
FgSoVvy7JcRLAKCX9sgU2by9pKxTmyZXvaUrEwGwXw==
=Ojdl
-----END PGP PUBLIC KEY BLOCK-----
Run Code Online (Sandbox Code Playgroud)

gnupg

3
推荐指数
1
解决办法
7213
查看次数

void f(int) 的模板和声明类型

我正在学习仅使用 C++11 借用std::true_typestd::false_type.

我创建了以下特征:

#include <iostream>

template <typename F>
struct is_farg1: std::false_type {};

template <typename R, typename A>
struct is_farg1<R (*)(A)> : std::true_type {};
Run Code Online (Sandbox Code Playgroud)

现在考虑一个包含上述特征的程序,以及以下代码:

void f(int) {}

int main() {
    std::cout << "is_farg1<decltype(f)>  : " << is_farg1<decltype(f)>::value << std::endl;
    std::cout << "is_farg1<void(*)(int)> : " << is_farg1<void(*)(int)>::value << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它产生以下输出:

is_farg1<decltype(f)>  : 0
is_farg1<void(*)(int)> : 1
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 为什么is_farg1<void(*)(int)>::valuetrue同时is_farg1<decltype(f)>::value返回false
  2. 如果我的 trait 写错了,那么我如何检查给定的函数是否只有一个参数,以便我也可以使用decltype(f)

c++ templates traits decltype c++11

3
推荐指数
1
解决办法
87
查看次数

函数访问args是否可以传递给main()?

有没有办法可以访问程序的args main()而不存储对它们的引用?

程序参数存储在程序的保留空间中,因此我认为没有理由不能访问它们.也许有类似的东西const char** get_program_arguments(),int get_program_arguments_count()但我找不到它......

我的问题来自于我正在重写现在在公司内的许多程序中使用的库,我需要访问这些程序的常见参数而不更改它们.例如,我需要程序名称,但我无法使用,::getenv("_")因为它们可以从各种shell执行.我不能使用GNU扩展,因为这需要在Linux,AIX,SunOS上使用gcc,CC等工作.

c c++ program-entry-point args

-1
推荐指数
1
解决办法
121
查看次数

为什么这个简单的C++代码段错误?

这是标题:

#include <string>

template <typename L>
class A
{
    L l;

public:
    A() : l("a-text") {}
    const std::string get() const { l.get(); } // <<<< Edit: missing return!
};
Run Code Online (Sandbox Code Playgroud)

这是a.cpp:

#include "a.h"
#include <iostream>

class L {
    const std::string v;

public:
    L(const std::string& v_): v(v_) {}
    const std::string get() const { return v; }
};

int main() {
    L l("l-text");
    std::cout << l.get().c_str() << std::endl;

    A<L> a;
    std::cout << a.get().c_str() << std::endl; // <<<< - this …
Run Code Online (Sandbox Code Playgroud)

c++ templates std

-6
推荐指数
1
解决办法
104
查看次数