小编And*_*dre的帖子

没有等价关系的std :: unique示例(删除连续的空格)

关于如何使用从字符串中删除连续空格的cppreference有一个示例std::unique:

std::string s = "wanna go    to      space?";
auto end = std::unique(s.begin(), s.end(), [](char l, char r){
    return std::isspace(l) && std::isspace(r) && l == r;
});
// s now holds "wanna go to space?xxxxxxxx", where 'x' is indeterminate
std::cout << std::string(s.begin(), end) << '\n';
Run Code Online (Sandbox Code Playgroud)

但是,在唯一的要求部分中说明

使用给定的二元谓词p比较元素.如果行为不是等价关系,则行为未定义.

所以我的问题是:给定的例子是否有效?谓词显然不是反身的(两个'n'字符比较不相等),因此不是等价关系.

c++ std

7
推荐指数
1
解决办法
197
查看次数

比较nullptr的惯用方法:if(p)vs if(p!= nullptr)

比较指针的惯用方法是nullptr什么?

if (ptr) ...
if (!ptr) ...
Run Code Online (Sandbox Code Playgroud)

要么

if (ptr != nullptr) ...
Run Code Online (Sandbox Code Playgroud)

我知道两者都是等价的,但哪个更好?

就个人而言,我发现第一个版本更容易阅读.但是从0文字隐式转换到nullptr不再被认为是惯用语(比如用于初始化),我想知道对指针的隐式转换是否也是如此bool.

是否有任何客观理由偏好一个而不是另一个?

作为类比,考虑一个功能void foo(void*).在这里,调用foo(nullptr)而不是依赖于隐式转换foo(0)更好,因为一旦我们添加了重载,后者就会中断void foo(int).

c++ pointers c++11

6
推荐指数
0
解决办法
598
查看次数

符号查找错误发生在运行时而不是加载时

我有一个应用程序,它使用 .so 共享库中的 Foo 类。我遇到了一个问题,在运行时它会打印

<应用程序名称>:符号查找错误:<应用程序名称>:未定义符号:<mangled_Foo_symbol_name>

现在,事实证明,未损坏的符号是针对 Foo 类的构造函数的,问题只是加载了旧版本的库,其中还不包含 Foo。

我的问题不是解决错误(显然是使用正确的库),而是为什么它出现在运行时而不是加载/启动时。

导致错误的代码行只是实例化了 Foo 类的对象,因此我在这里没有使用 dlopen 之类的东西,至少没有明确/据我所知。

相反,如果我从加载搜索路径中删除整个库,则会在启动时收到此错误:

<appname>:加载共享库时出错:libname.so.2:无法打开共享对象文件:没有这样的文件或目录

当加载路径上有错误版本的 gcc / libstdc++ 时,启动时也会出现错误:

<应用程序名称>:/path/to/gcc-4.8.0/lib64/libstdc++.so.6:找不到版本“GLIBCXX_3.4.20”(<应用程序名称>需要)


这种“快速失败”行为更可取,我不想首先运行我的应用程序很长一段时间,直到我最终意识到它使用了错误的库。是什么导致运行时出现加载错误以及如何使其立即出现?

c++ linux ld

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

Jupyter Notebook:隐藏/折叠一段文本作为“提示”

我正在使用 Jupyter Notebook 进行交互式编码演示。有一个练习块,用户应该在其中输入自己的代码来尝试解决问题。

我现在想选择性地给出一些进一步的说明,即提示如何解决问题,默认情况下应该隐藏。

我找到了这个答案,它在这里链接到这个网站,在一个原始的 nbconvert 单元中使用 JavaScript 来隐藏输出单元。但是,这似乎只适用于导出的笔记本,而我想要笔记本本身中的一些东西。所以我尝试将类似的 JS 添加到 Markdown 单元格中,但这不起作用,因为 JS 被清理掉了。

我不确定 CSS 是否也得到净化,但原始 HTML 有效。有没有一种好方法来创建一个隐藏/折叠的文本段落,例如“单击此处获取进一步说明”以显示文本?

到目前为止,我能想到的最好的方法是title创建鼠标悬停文本的属性,不幸的是没有进一步格式化:

<span title="Instruction text goes here">Mouse over for further instructions</span>

html jupyter jupyter-notebook

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

SFINAE:检测成员变量的存在不适用于g ++

我正在尝试结合此答案中用于检测类是否具有成员变量的方法,x并根据此答案选择不同的实现enable_if

基本上,我想编写一个trait类,给定一个type T,它可以访问成员(T::x如果存在),否则提供一个默认值。

以下代码无法在g ++上编译:(Compiler Explorer

#include <iostream>
#include <type_traits>

// classes with / without x member
struct WithX { static constexpr int x = 42; };
struct WithoutX {};

// trait to detect x
template <typename T, typename = void>
struct HasX : std::false_type { };

template <typename T>
struct HasX <T, decltype((void) T::x)> : std::true_type { };

// trait to provide default for x
template …
Run Code Online (Sandbox Code Playgroud)

c++ g++ sfinae

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

标签 统计

c++ ×4

c++11 ×1

g++ ×1

html ×1

jupyter ×1

jupyter-notebook ×1

ld ×1

linux ×1

pointers ×1

sfinae ×1

std ×1