跳转至内容
  • 从小白的视角探究 vector 第2章

    现代C++ | mcpp论坛
    3
    0 赞同
    3 帖子
    38 浏览
    dustchensD

    @dustchens 在 从小白的视角探究 vector 第2章 中说:

    Vector& operator=(const Vector &other) {
    // 注意
    if(this != &other) {
    this->~Vector();
    mSize_e = other.mSize_e;
    mCapacity = other.mCapacity;
    mDataPtr_e = static_cast<T *>(Alloc::allocate(sizeof(T) * mCapacity));
    for (int i = 0; i < mSize_e; i++) {
    mDataPtr_e[i] = other.mDataPtr_e[i];
    }
    }
    return *this;
    }

    这一章节,需要大家思考这段内容,是否正确,为什么没有加上noexcept,noexcept为什么如此重要,需要后续单开一个章节去讲解

  • 0 赞同
    1 帖子
    19 浏览
    尚无回复
  • 从小白的视角探究 vector

    已移动 现代C++ | mcpp论坛
    5
    1 赞同
    5 帖子
    82 浏览
    dustchensD

    @dustchens 在 从小白的视角探究 vector 中说:

    光讲套壳,这和 vector 又有什么关系呢?深水区来了。

    第一节的精髓在于这一段之后的内容。不过我没有给出栈和作用域等内容的讲解。这段内容本身是非常复杂的,但是副作用却很小,小到每个人编程一开始都能无障碍使用。

    拿函数来类比vector,就是因为我感觉缺少一个能够切入申请空间和管理生命周期的点,如果说每个人一开始就能写的main函数,是最简化了空间管理和生命周期管理,让你意识不到它的存在,那么vector就是需要我们把这套内容拿到明面上来,且二者的本质是一样的(从空间和生命周期管理的语义来看)

  • C++学习资料开源

    现代C++ | mcpp论坛
    1
    2 赞同
    1 帖子
    269 浏览
    尚无回复
  • 析构函数为何会调用

    已锁定 已解决 General Discussion | 综合讨论
    3
    1 赞同
    3 帖子
    411 浏览
    sunrisepeakS

    @CS-liujf 这里T2推导的应该是B类型

  • 关于c++ chrono库中类型方面的问题

    已锁定 已解决 General Discussion | 综合讨论
    2
    0 赞同
    2 帖子
    294 浏览
    sunrisepeakS

    chrono:xxseconds 一般是duration的别名

    _EXPORT_STD using nanoseconds = duration<long long, nano>; _EXPORT_STD using microseconds = duration<long long, micro>; _EXPORT_STD using milliseconds = duration<long long, milli>; _EXPORT_STD using seconds = duration<long long>; _EXPORT_STD using minutes = duration<int, ratio<60>>; _EXPORT_STD using hours = duration<int, ratio<3600>>;

    而duration的构造存在隐式类型转换, 他的构造函数是一个模板, 在构造函数里会使用duration_cast把std::chrono::milliseconds转成chrono::microseconds

    template <class _Rep2, enable_if_t<is_convertible_v<const _Rep2&, _Rep> && (treat_as_floating_point_v<_Rep> || !treat_as_floating_point_v<_Rep2>), int> = 0> constexpr explicit duration(const _Rep2& _Val) noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<_Rep2>) // strengthened : _MyRep(static_cast<_Rep>(_Val)) {} template <class _Rep2, class _Period2, enable_if_t<treat_as_floating_point_v<_Rep> || (_Ratio_divide_sfinae<_Period2, _Period>::den == 1 && !treat_as_floating_point_v<_Rep2>), int> = 0> constexpr duration(const duration<_Rep2, _Period2>& _Dur) noexcept(is_arithmetic_v<_Rep> && is_arithmetic_v<_Rep2>) // strengthened : _MyRep(_CHRONO duration_cast<duration>(_Dur).count()) {} // 具体转换的代码 _NODISCARD constexpr _Rep count() const noexcept(is_arithmetic_v<_Rep>) /* strengthened */ { return _MyRep; }

    https://github.com/microsoft/STL/blob/a1bc1261795d4097cf7c12cfd0b5e2091809f281/stl/inc/__msvc_chrono.hpp#L110-L117