我运行以下SSH命令来创建我的rsa密钥,但我不知道文件的创建位置
drlloyd@DIS-7L79KF1 ~/.ssh
$ ssh-keygen -t rsa -C "myemail@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/f/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /f/.ssh/id_rsa.
Your public key has been saved in /f/.ssh/id_rsa.pub.
I removed the rsa fingerprint
Run Code Online (Sandbox Code Playgroud)
id_rsa.pub文件在哪里创建?
std::initializer_list
我所看到的大多数C++ 11代码都是按值来获取的,但有时它是由右值引用获取的.这样做有什么好的理由吗?
例如,我遇到的几乎所有例子都是这样的:
class A {
public:
A(std::initializer_list<int>);
};
Run Code Online (Sandbox Code Playgroud)
但我偶尔会看到这件事:
class B {
public:
B(std::initializer_list<int> &&);
};
Run Code Online (Sandbox Code Playgroud)
我理解一般的rvalue引用的用途和目的,但为什么在a的情况下,其中一个优先于另一个std::initializer_list
?我唯一能想到的是class A
允许初始化列表单独构建,并class B
防止这种情况发生.
std::initializer_list<int> values {1,2,3,4};
A a(values); // valid
B b(values); // error
Run Code Online (Sandbox Code Playgroud)
但我想不出一个很好的理由,为什么要防止这是一件令人满意的事情.
那么,为什么会std::initializer_list
采用右值参考而不是值?
我如何可靠地对任何不是字符串文字的东西进行static_assert?
例如,在下面的代码中,我试图包装标准的断言宏,但静态拒绝任何不是字符串文字的消息(因为当断言触发时,除了字符串文字之外的任何东西都不会在运行时显示).
#include <cassert>
#include <string>
#include <type_traits>
#define my_assert(test, message)\
static_assert(\
(\
!std::is_pointer<decltype(message)>::value &&\
!std::is_array<decltype(message)>::value\
),\
"literal string required"\
);\
assert((message, (test)));
int main() {
my_assert(1 == 1, "one equals one");
my_assert(1 == 2, "one equals two");
{
const char *msg = "one equals one";
//my_assert(1 == 1, msg); // triggers static_assert
}
{
const char msg[] = "one equals one";
//my_assert(1 == 1, msg); // triggers static_assert
}
{
const std::string msg = "one equals one";
//my_assert(1 == …
Run Code Online (Sandbox Code Playgroud) 如何从模板基类继承构造函数而不重复模板参数(并且不使用宏):
例如,这不起作用(使用GCC 4.8):
template <typename T>
struct base {};
template <typename U>
struct derived : base<U> {
using base::base;
};
Run Code Online (Sandbox Code Playgroud)
如果我重复基类的模板参数,它确实有效:
template <typename T>
struct base {};
template <typename U>
struct derived : base<U> {
using base<U>::base;
};
Run Code Online (Sandbox Code Playgroud)
问题是"U"可能是非常复杂的东西,很烦人且容易重复.例如,这是我最初的激励示例之一:
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/key_extractors.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/sequenced_index.hpp>
using namespace boost::multi_index;
struct as_list_tag {};
struct as_set_tag {};
template <typename T>
struct unique_list : multi_index_container <
T,
indexed_by <
sequenced<tag<as_list_tag>>,
ordered_unique<tag<as_set_tag>, identity<T>>
>
> {
using multi_index_container <
T,
indexed_by <
sequenced<tag<as_list_tag>>, …
Run Code Online (Sandbox Code Playgroud) C++用户定义的文字运算符是否可以传递空指针?
这实际上发生在g ++的实验版本(gcc版本4.7.0 20111114(实验性)[主干版本181364](Debian 20111114-1))但我不确定这是一个错误(90%肯定)还是一些奇怪的预期行为.
示例程序:
#include <iostream>
#include <stdexcept>
#include <string>
std::string operator "" _example (const char * text) {
using std::cerr;
using std::endl;
cerr << "text (pointer) = " << static_cast<const void *>(text) << endl;
if (!text) throw std::runtime_error("Is a null pointer really expected?");
cerr << "text (string) = \"" << text << '"' << endl;
return text;
}
int main() {
2_example;
1_example;
0_example;
}
Run Code Online (Sandbox Code Playgroud)
输出(可能是gcc中的一个bug ......但也许不是?!,因此问题):
text (pointer) = 0x8048d49
text (string) = "2"
text (pointer) …
Run Code Online (Sandbox Code Playgroud) 在Git中,如何在对象数据库中找到包含字符串模式的所有blob的SHA-1 ID?git-grep
仅提供文件路径而不提供sha1 ID.
在处理未定义的行为时,主要的开源项目使用了一些GCC标志来解决编译器过于敏锐的问题,特别是在C和C++语言中.例如:
-fno-strict-aliasing是那些在打字时需要"传统"行为的人的主食.例如:https://lkml.org/lkml/2003/2/26/158
-fwrapv通常用于希望具有已签名溢出的已知行为.例如:http://archives.postgresql.org/pgsql-hackers/2005-12/msg00635.php
那还有什么?我显然可以从GCC文档中获取完整列表,其中标记将未定义的行为转换为什么样的实现定义行为.但是,我更感兴趣的是主要开源项目使用哪些选项以及为什么?
这个问题起源于我ostream & operator << (ostream &, some_type)
对C++中使用通常的数值类型输出数值的正确方法的讨论.
我熟悉std :: showbase和std :: showpos在每个基础中的行为,它们基本上是互斥的.即:在十进制中没有显示基数,并且在正数上添加'+'; 而在十六进制或八进制中,显示了基数,但未显示"+"(也不是减号),因为打印类型的值就好像它被转换为无符号类型一样.
例如,这个简单(详细)的程序:
#include <iostream>
int main() {
std::cout << std::dec << std::showpos << std::showbase << int64_t(+5) << std::endl;
std::cout << std::oct << std::showpos << std::showbase << int64_t(+5) << std::endl;
std::cout << std::hex << std::showpos << std::showbase << int64_t(+5) << std::endl;
std::cout << std::dec << std::showpos << std::showbase << int64_t(-5) << std::endl;
std::cout << std::oct << std::showpos << std::showbase << int64_t(-5) << std::endl;
std::cout << std::hex << …
Run Code Online (Sandbox Code Playgroud) 你如何完全逃脱 perl 替换的 REPLACEMENT 部分s//
? \Q
并且\E
也不会因为工作,如下图所示:
对于上下文,当使用 perl 执行由 bash 脚本驱动的大型递归搜索和替换操作时会出现这种情况。这不是一个容易避免的情况。
以这个脚本为例:
$ cat example.sh
#!/bin/bash
set -v -x
EMAIL=user@example.org
echo "EMAIL = $EMAIL"
echo "Email address: here" | perl -p -e "s/here/$EMAIL/"
echo "Email address: here" | perl -p -e "s/here/\\Q$EMAIL\\E/"
echo "Email address: here" | perl -p -e "s/here/${EMAIL/@/\\@}/"
Run Code Online (Sandbox Code Playgroud)
让我们运行它:
$ ./example.sh
EMAIL=user@example.org
+ EMAIL=user@example.org
echo "EMAIL = $EMAIL"
+ echo 'EMAIL = user@example.org'
EMAIL = user@example.org
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。外壳没有破坏任何东西,我们正在回应我们的期望。
echo "Email address: …
Run Code Online (Sandbox Code Playgroud) 下面的代码合法吗?
class C
{
virtual ~C() noexcept = default;
};
Run Code Online (Sandbox Code Playgroud)
或者
class C
{
virtual ~C() throw() = default;
};
Run Code Online (Sandbox Code Playgroud)
(throw() 已弃用,但我的编译器不支持 noexcept ;;)
我刚刚学习禅宗编码,并尝试这样做:
输入“lorem”并按 Tab 键将生成 50 个单词的 lorem 文本。
但是,如果我开始<p></p>
,然后在标签内输入 lorem + tab,它不会生成 lorem 文本。
有一个更好的方法吗?
我有一个关于我正在阅读的字符串的问题,并根据分隔符将其拆分并将其存储在列表中.
我有这个输入1.2.3.4.在哪里.是分隔符.现在,当我使用分割时,我最后会得到这个字符"".这个角色是什么?
for element in data.split('.'):
L.append(element)
print L #prints out ["1","2","3","4",""]
Run Code Online (Sandbox Code Playgroud)
我的问题是什么是最后一个数组元素""?我想不仅在这个数组中,而且在字符串数据中摆脱这个元素.我试过使用element.rstrip(element)
它但没有摆脱它.我认为我的大部分困惑都来自python中的"".Ialso尝试使用,L.remove("")
但似乎没有用.