C/C++开发

关于析构函数中对象生存期的说明

Another question引用C++标准: 3.8/1&q;类型T的对象的生存期在以下情况结束:-如果T是具有非平凡析构函数的类类型(12.4),则析构函数调用 开始,或者-对象占用的存储被重复使用,或者 已发布。&Quot; 这似乎意味着不允许从析构函数访问对象的成员。然而,这似乎是错误的,事实更像是Kerrek SB的回答中所解释的: 成员对象在构造函数体运行之前激活, ..
发布时间:2022-05-19 11:54:48 C/C++开发

使用基类指针创建对象时,缺少派生类析构函数

在下面的代码示例中,未调用派生类析构函数。知道为什么吗? 我有一个具有虚函数的基类。现在,我使用基类指针来创建派生类的新对象。我的理解是,当销毁派生类对象时,首先调用派生类的析构函数,然后调用基类。然而,我只看到基类的析构函数被调用。有人知道我做错了什么吗,或者我对C++的理解在哪里不正确? #include #include using namesp ..
发布时间:2022-05-19 11:31:04 C/C++开发

为什么C++对象有一个默认的析构函数?

例如,当我没有声明构造函数时,编译器将为我提供一个没有参数和定义(空体)的默认构造函数,因此不会采取任何操作。 那么,例如,如果我完成了一个对象,默认的析构函数不会重新分配(释放)该对象使用的内存吗?如果它没有,为什么我们会得到它? 而且,可能同样的问题也适用于默认构造函数。如果它什么也不做,为什么默认情况下会为我们创建它? 推荐答案 说编译器生成的默认构造函数不执行任何操作是 ..
发布时间:2022-05-19 11:08:59 C/C++开发

Range-for循环c++20中当前元素的访问索引

在C++20之前的问题Access index in range-for loop (answer)中提到 2020注意:使用基于lambda的解决方案可能比使用宏诡计更明智。 有人能发布基于lambda的C++20解决方案吗?C++20还有其他新的解决方案吗? 编辑:我有一个主循环,它在向量的大小上是多态的。由于我必须经常阅读和修改这段代码,我认为我有理由希望得到最好的解决方案 ..
发布时间:2022-05-17 13:04:43 C/C++开发

C++概念成员检查类型与引用的不一致

我正在学习C++概念,我有一个讨厌的问题: 我不知道如何区分成员变量是int类型的变量和成员变量是int&类型。 原因是我正在使用的检查使用的是instance.ember语法,而在C++中,它返回一个引用。 完整示例: #include #include template void print(T t) ..
发布时间:2022-05-17 12:58:08 C/C++开发

C++-std::Initializer_List与std::span

std::initializer_list和有什么区别?两者都是某种类型的值的连续序列。这两家公司都没有所有权。 那么,我们什么时候使用第一个,什么时候使用后者? 推荐答案 简而言之,std::initializer_list用于创建新区域,用于初始化。而std::span用于引用现有范围,以获得更好的接口。 std::initializer_list是一种语言 ..
发布时间:2022-05-17 12:50:16 C/C++开发

有什么方法可以改进这个Delegate<;void(int&;)>;::Bind<;TestStruct&;,&;TestStruct::SomeFunction>;(estStruct,Value)语法吗?

我正在尝试实现一个委托类型,该类型将与泛型回调一起使用,并在存在重载集的情况下工作。 为简化起见,此处摘录了类,并将绑定方法实现为静态函数以简化问题。 template class Delegate; template struct Delegate ..
发布时间:2022-05-17 12:44:17 C/C++开发

C++20、clang 13.0.0、u8字符串支持

我在一个基于CMAKE的项目中使用clang 13.0.0,CMAKE_CXX_STANDARD被定义为20。以下代码导致编译错误(命名空间‘std’中没有名为‘u8string’的类型): #include #include int main() { #ifdef __cpp_char8_t std::u8string sss = u8"a ..
发布时间:2022-05-17 12:28:35 C/C++开发

使用范围/视图而不是模板的通用编程?

我希望有接受任何固定类型容器的函数。例如,将同时接受std::array和std::array的函数。 我原以为使用Range可以做到这一点,但我意识到我的理解相当肤浅。 是否可以在没有模板的情况下实现? 编辑:我们是否可以使用范围库来定义一个类型,该范围库将执行与SPAN相同的操作,但将用于非连续容器?也许我的问题表达得不对,我的意思可能是视 ..
发布时间:2022-05-17 12:12:33 C/C++开发

概念(C++20)可以用作布尔值吗?

using T = decltype(std::same_as) 我已经在VS2019上试过了。结果是T = bool。 这是由标准定义的,还是仅由特定编译器定义的属性? 我还没有找到关于这件事的任何官方消息。 https://en.cppreference.com/w/cpp/concepts 推荐答案 AConcept-idLikestd::same ..
发布时间:2022-05-17 11:43:43 C/C++开发