deleted-functions相关内容

禁止使用`static_assert`函数

我想防止某些函数被调用.让我们忽略通过函数指针或其他函数调用函数的情况,仅关注直接函数调用的情况.我可以用= delete做到这一点.但是,发出的诊断信息并不充分.我考虑过使用static_assert,您可以使用它提供自定义诊断消息.我在函数体内放置了static_assert(false, ...)语句,希望它在调用函数时触发.但是,事实证明即使未调用该函数,static_assert也将失败 ..
发布时间:2020-07-21 19:01:57 其他开发

在基类中删除复制和移动构造函数/赋值运算符是否足够?

如果我有一个抽象基类,并且想使所有派生类不可复制且不可移动,那么声明在基类中删除的这些特殊成员函数就足够了吗?我想确保我的整个类层次结构是不可复制和不可移动的,并且想知道是否可以不必在每个派生类中将这4个特殊成员函数声明为已删除.我看到一个SO答案,似乎暗示着派生类尽管已从基类中删除了,但仍可以显式声明副本或移动构造函数,但以下示例在尝试定义默认的副本赋值运算符时导致编译错误,因此我不确定.这是错 ..
发布时间:2020-07-21 19:00:53 其他开发

为什么不能构造包含ostringstream成员的对象?

我有以下课程示例,是从较大的项目简化而来的.它基于一个日志记录框架,该框架使用记录器的作用域终止析构函数中的日志条目. 下面的代码将无法编译,因为构造函数是一个隐式删除的函数( edit:不是true ),该函数似乎与std::ostringstream对象有关.我对此感到困惑,因为我认为我应该能够直接构造std::ostringstream,这意味着我应该能够直接构造Container对象 ..
发布时间:2020-07-21 18:59:50 其他开发

将已删除的函数声明为noexcept有什么意义吗?

考虑一个类的以下两种可能的定义: 展览A: struct A { A() = delete; }; 图A': struct A { A() noexcept = delete; } 将已删除的函数声明为noexcept有什么意义吗? 解决方案 (最初将其发布为评论,但建议将其发布为答案.) 不,不.不能调用已删除的函数(或者在构造函数的情况下 ..
发布时间:2020-07-01 19:40:11 其他开发

删除复制代码&复制分配-是公共的,私人的还是受保护的?

为了使对象不可复制,我们可以显式删除其复制构造函数和复制赋值运算符。 我的问题是:什么是正确的地方-在公众,私有或受保护的部分?而且-这个选择有什么区别吗? 解决方案 在哪里做的正确选择-在该类的公共,私人或受保护的部分? 我会将它们放入 public 部分。 这是因为删除构造函数或赋值运算符与使它们成为 private / 受保护的;并且在不删除它们的情况下,它们默 ..
发布时间:2020-05-31 23:52:23 其他开发

错误C2280:尝试引用已删除的函数

我是游戏开发的新手,非常新的c ++,但我已经开始开发一个小Arkanoid游戏。我以前已经运行它,但重构后(介绍ArkanoidGame类)它不编译,我不能弄清楚为什么。 我得到的错误是: d:\dropbox\development\gamedev\c ++ \arkanoid\arkanoid\main.cpp 14):error C2280: 'ArkanoidGame :: ..
发布时间:2016-12-23 14:42:53 其他开发

通过函数打开流

我需要帮助 [io](f)流的不可复制性质。 我需要为 fstream 提供一个hackish包装,以便处理在Windows上的文件名中带有unicode字符的文件。为此,我设计了一个包装器函数: bool open_ifstream(istream& stream,const string& filename) { #ifdef __GLIBCXX__ FILE * res ..
发布时间:2016-11-06 03:31:37 C/C++

任何函数都可以被删除的函数?

工作草案明确调用 defaulted-functions 必须是特殊成员函数(例如,copy-constructor,default-constructor等,§8.4.2.1-1)。 但是,我没有在 deleted-functions (§8.4.3)中看到任何这样的限制。是这样吗? 或者换句话说,这三个例子有效 c ++ 0 ? struct Foo { // 1 ..
发布时间:2016-10-24 13:29:22 C/C++

任何函数都可以被删除的函数?

工作草案明确调用 defaulted-functions 必须是特殊成员函数(例如,copy-constructor,default-constructor等,§8.4.2.1-1)。 但是,我没有在 deleted-functions (§8.4.3)中看到任何这样的限制。是这样吗? 或者换句话说,这三个例子有效 c ++ 0 ? struct Foo { // 1 ..
发布时间:2016-10-24 13:12:12 C/C++

有一个类是可复制但不可移动的任何用例?

阅读此最新问题 by @Mehrdad,其中类应该是不可移动,因此不可复制,我开始怀疑是否有一个类可以复制但不移动。从技术上讲,这是可能的: struct S { S(){} S(S const& s){} S(S&&)= delete; }; S foo() { S s1; S s2(s1); // OK(可复制) return s1; //错误! (不 ..
发布时间:2016-10-23 22:06:26 C/C++

默认移动构造函数/赋值和删除拷贝构造函数/赋值

根据标准, 如果类X的定义没有显式声明一个移动构造函数,作为默认值(如果且仅当 ) - X没有用户声明的复制构造函数, 没有用户声明的复制赋值运算符, - X没有用户声明的移动赋值运算符, - X没有用户声明的析构函数。 b $ b #include class Foo { public: Foo()= default; ..
发布时间:2016-10-20 21:43:22 C/C++

错误:使用删除的功能

我一直在使用一些朋友写的一些C ++代码,我得到以下错误,我从来没有见过使用gcc4.6编译: 错误:使用删除的函数 'GameFSM_ > :: hdealt :: hdealt()'被隐式删除,因为默认定义将是不成形的: uninitialized non-static const member'const h_t FlopPokerGa ..
发布时间:2016-10-16 14:24:38 C/C++

如何“=默认”不同于“{}”为默认构造函数和析构函数?

我最初发布这个问题只是关于析构函数,但现在我添加了默认构造函数的考虑。这是原来的问题: 如果我想给我的类一个析构函数是虚拟的,但是 否则相同编译器会生成什么,我可以使用 = default : Widget { public: virtual〜Widget()= default; }; 但是似乎我可以得到相同的效果与更少的打字使用 空定义: cla ..
发布时间:2016-10-11 21:34:07 C/C++