小编sah*_*ahn的帖子

libssl.so.1.1:无法打开共享对象文件:没有这样的文件或目录

我刚刚更新到Ubuntu 22.04 LTS,我使用OpenSSL 的库刚刚停止工作。看起来 Ubuntu 已经切换到了 OpenSSL 3.0 版本。

例如,诗歌不再起作用:

Traceback (most recent call last):
  File "/home/robz/.local/bin/poetry", line 5, in <module>
    from poetry.console import main
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/__init__.py", line 1, in <module>
    from .application import Application
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/application.py", line 7, in <module>
    from .commands.about import AboutCommand
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/commands/__init__.py", line 4, in <module>
    from .check import CheckCommand
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/commands/check.py", line 2, in <module>
    from poetry.factory import Factory
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/factory.py", line 18, in <module>
    from .repositories.pypi_repository import …
Run Code Online (Sandbox Code Playgroud)

python linux openssl python-poetry

114
推荐指数
8
解决办法
22万
查看次数

C 和 C++ 之间的“if”语句语法差异

if (1) int a = 2;
Run Code Online (Sandbox Code Playgroud)

这行代码是有效的 C++ 代码(至少可以编译)但无效的 C 代码(无法编译)。我知道语言之间存在差异,但这一差异是出乎意料的。

我一直以为语法是

if (expr) statement
Run Code Online (Sandbox Code Playgroud)

但这将使其在两者中都有效。

我的问题是:

  1. 为什么这个不能用 C 编译?
  2. 为什么会存在这种差异呢?

c c++ cross-language language-lawyer

93
推荐指数
4
解决办法
8385
查看次数

tidyverse 未加载,它显示“命名空间 'vctrs' 0.2.0 已加载,但需要 &gt;= 0.2.1”

强文本我在安装包时不断遇到问题tidyverse,这使我无法执行许多文本处理任务。这个问题与 2017 年以来许多以前的线程中提到的问题相同,当我输入library(tidyverse)或尝试打开其他相关包时,他们总是说它需要 0.2.1 版本的vctrs. 我尝试过使用remote下载或下载其他临时版本但无济于事。有人可以帮我解决这个问题吗?

\n

我正在使用最新版本的 R(版本 3.6.1),在 Rstudio 1.2.5033 上运行。我还更新了我的vctrs包。

\n
install.packages("tidyverse")\ndevtools::install_github("tidyverse/tidyverse")\nlibrary(tidyverse)\nError: package or namespace load failed for \xe2\x80\x98tidyverse\xe2\x80\x99 in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):\n namespace \xe2\x80\x98vctrs\xe2\x80\x99 0.2.0 is already loaded, but >= 0.2.1 is required\nIn addition: Warning message:\npackage \xe2\x80\x98tidyverse\xe2\x80\x99 was built under R version 3.6.2 \n\n\nlibrary(devtools)\ndevtools::install_github("tidyverse/tidyverse")\nlibrary(tidyverse)\nError: package or namespace load failed for \xe2\x80\x98tidyverse\xe2\x80\x99 in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):\n namespace \xe2\x80\x98vctrs\xe2\x80\x99 0.2.0 is …
Run Code Online (Sandbox Code Playgroud)

r devtools tidyverse vctrs

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

为什么 std::totally_ordered&lt;float&gt; 返回 true?

cpp 参考(https://en.cppreference.com/w/cpp/concepts/totally_ordered)表示std::totally_ordered<T>,仅当给定左值 a、b 和 c 类型时才进行建模const std::remove_reference_t<T>

  • bool(a < b)恰好是bool(a > b)和之一bool(a == b)
  • 如果bool(a < b)bool(b < c)都为真,则为bool(a < c)真;
  • bool(a > b) == bool(b < a)
  • bool(a >= b) == !bool(a < b)
  • bool(a <= b) == !bool(b < a)

于是我想了一下NaN,发现这float句话不符合bool(a > b) == bool(b < a)。但是。std::totally_ordered<float>true我做错了什么吗?

=======

我用这个宏来创建NaN, …

c++ language-lawyer c++20

14
推荐指数
1
解决办法
733
查看次数

从 std::Optional 中获取值

实际上如何从可选项中获取值?意思是取得 中的值的所有权std::optional并将其替换为std::nullopt(或将其交换为另一个值)?

例如,在 Rust 中,您可以.unwrap执行Option或执行类似的操作foo.take().unwrap()。我正在尝试用 C++ 做类似的事情optional

c++ option-type c++17 stdoptional

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

为什么函数模板不允许使用私有类型进行显式专业化?

https://godbolt.org/z/s5Yh8e6b8

我不明白这背后的原因:为什么类模板允许显式专用化私有类型,但函数模板不允许?

假设我们有一堂课:

class pepe
{
    struct lolo
    {
        std::string name = "lolo";
    };
public:
    static lolo get()
    {
        return {};
    }
};
Run Code Online (Sandbox Code Playgroud)
  • 类模板可以显式特化。
  • 并且函数模板在隐式实例化时没有问题。
  • 尽管您无法创建,spec_class<pepe::lolo>{}因为pepe::lolo无法访问。
template <typename>
struct spec_class
{};

// this is ok
template <>
struct spec_class<pepe::lolo>
{};

// this will be ok also upon implicit instantiation
template <typename T>
void template_func(const T &t)
{
    std::cout << "implicit: " << t.name << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但:

// this is not ok!
// template <>
// …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer

13
推荐指数
1
解决办法
1045
查看次数

具有带默认值的指针参数的类模板

我试图理解下面的代码片段

\n
template <typename T>\nclass testopaque {\npublic:\n    void test(T var = T()) {}\n};\n
Run Code Online (Sandbox Code Playgroud)\n

使用指针类型示例 int * 调用时默认参数如何工作

\n
int main() {\n    testopaque<int *> obj1;\n    obj1.test();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

调用 obj1.test() 时编译器会生成什么。当我尝试时出现编译器错误

\n
int main() {\n    int * var = int *();\n}\n\nerror: expected primary-expression before \xe2\x80\x98int\xe2\x80\x99\nint * ptr = int *();\n
Run Code Online (Sandbox Code Playgroud)\n

c++ templates

12
推荐指数
3
解决办法
569
查看次数

如何根据列名子集的成对组合创建新的数据表?

我正在尝试定义一个函数,该函数将数据框或表作为具有特定数量的 ID 列(例如,2 或 3 个 ID 列)的输入,其余列是 NAME1、NAME2、...、NAMEK(数字列) )。输出应该是一个数据表,其中包含与之前相同的 ID 列以及一个附加 ID 列,该 ID 列对列名称的每个唯一的成对组合进行分组(NAME1、NAME2、...)。另外,我们必须根据ID列将数字列的实际值收集到两个新列中;具有两个 ID 列和三个数字列的示例:

ID1 <- c("A","A","A","B","B","B")
ID2 <- c(1,2,3,1,2,3)
NAME1 <- c(10,11,9,22,25,22)
NAME2 <- c(7,9,8,20,22,21)
NAME3 <- c(10,12,11,15,19,30)
DT <- data.table(ID1,ID2,NAME1,NAME2,NAME3)
Run Code Online (Sandbox Code Playgroud)

我希望以 DT 作为输入的函数的输出为

ID.new <- c("NAME1 - NAME2","NAME1 - NAME2","NAME1 - NAME2", "NAME1 - NAME2",
 "NAME1 - NAME2","NAME1 - NAME2", "NAME1 - NAME3", "NAME1 - NAME3",
 "NAME1 - NAME3","NAME1 - NAME3","NAME1 - NAME3","NAME1 - NAME3",
 "NAME2 - NAME3","NAME2 - NAME3","NAME2 - NAME3","NAME2 - NAME3", …
Run Code Online (Sandbox Code Playgroud)

r data.table

11
推荐指数
2
解决办法
1071
查看次数

std::variant 和不明确的初始化

考虑以下代码:

void fnc(int)
{
    std::cout << "int";
}

void fnc(long double)
{
    std::cout << "long double";
}

int main()
{
    fnc(42.3); // error
}
Run Code Online (Sandbox Code Playgroud)

由于对 的调用不明确,它会给出错误fnc
但是,如果我们编写下面的代码:

std::variant<int, long double> v{42.3};
std::cout << v.index();
Run Code Online (Sandbox Code Playgroud)

输出为1,这表明已选择double->转换。long double据我所知,std::variant遵循有关转换等级的 C++ 规则,但这个示例显示了差异。这种行为有什么解释吗?

c++ std language-lawyer c++17

10
推荐指数
1
解决办法
807
查看次数

使用/不使用 std::next_permutation 进行重复排列“不改变重复项的顺序”

我曾经使用 来实现重复排列std::next_permutation

但我发现 it( std::next_permutation) 改变了重复项目的位置。

e.g.
[0] 0 1 2 2'
[1] 2' 0 1 2
[2] 2' 1 0 2
[3] 2' 1 2 0 
...
Run Code Online (Sandbox Code Playgroud)

如何使用重复实现排列而不改变重复项的顺序(使用/不使用)std::next_permutation

e.g.
[0] 0 1 2 2'
[1] 1 0 2 2'
[2] 1 2 0 2'
[3] 1 2 2' 0
...
Run Code Online (Sandbox Code Playgroud)

c++ permutation std

9
推荐指数
1
解决办法
443
查看次数