小编Del*_*ltA的帖子

理解 C++ move_constructible 概念实现

move_constructible我从cppreference得到了以下 C++ 概念的实现

template<typename _Tp>
concept move_constructible =
    constructible_from<_Tp, _Tp> &&
    convertible_to<_Tp, _Tp>;
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这有效。我认为任何类型都可以转换为自身,因此第二个要求是毫无意义的(上帝,我一定是在某些方面错了)。另外,对于第一个要求,我希望constructible_from<_Tp, _Tp&&>检查类型是否可以从 rvalue-ref 构造(因此移动)。

请解释一下这个实现是如何工作的。

c++ move-constructor move-semantics c++-concepts c++20

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

为什么这个独立程序会出现段错误?

我发现了一个我无法解释的有趣行为。我编写了这个非常简单的程序,它在没有明显原因的情况下出现了段错误。请问,有人可以解释一下这里发生了什么吗?

  • 该程序在 Ubuntu 中运行(我不知道这是否重要)。
  • 没有包含,没有库,没有到 stdlib 的链接。没有任何依赖关系。

我已经测试过,当发生以下任何一种情况时,段错误就会消失:

  • stdlib 已链接(并重命名_startmain、删除了 extern "C" 等)
  • 使用海湾合作委员会
  • 优化已启用

以下是该程序唯一的代码文件,我们称之为main.cpp.

构建它clang main.cpp -nostdlib

struct A
{
    A () = default;
    A (const A &) = default;
    // A (A &) = default;

    char * a = nullptr;
    unsigned long long b;
};

struct ConvertibleToA
{
    ConvertibleToA() = default; // default constructor
    operator A() { return m_a; } // conversion to type A
    A m_a;
};

extern …
Run Code Online (Sandbox Code Playgroud)

c++

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