deleted-functions相关内容
删除了包含POD和默认构造函数的结构。使用-std=c++2a编译时,尝试聚合初始化结构的实例会导致g++9.1中的编译错误。使用-std=c++17可以很好地编译相同的代码。 https://godbolt.org/z/xlRHLL struct S { int a; S() = delete; }; int main() { S s {.a = 0}; }
..
用旧版本的g++(4.8.0,MinGW)编译项目我发现这段代码编译失败: templatevoid foo() = 删除;模板void foo(){}int main() {foo();返回0;} 如果 g++ 看到基本情况被删除,它似乎甚至不会尝试寻找显式特化. mitalia@mitalia:~/scratch$/opt/mingw32-dw2/bin/i686-w64-mingw
..
我按此顺序提出了一系列与同一源代码相关的一系列问题: experimenting-with-unions-and-bitfields在结构和模板内 “> try-to-flip-the-order-of -bits-in-stdbitset 避免-ambiguity-in-overload-resolution 我还在“代码审查"中问了一系列与此相关的问题. emulatio
..
我想防止某些函数被调用.让我们忽略通过函数指针或其他函数调用函数的情况,仅关注直接函数调用的情况.我可以用= delete做到这一点.但是,发出的诊断信息并不充分.我考虑过使用static_assert,您可以使用它提供自定义诊断消息.我在函数体内放置了static_assert(false, ...)语句,希望它在调用函数时触发.但是,事实证明即使未调用该函数,static_assert也将失败
..
如果我有一个抽象基类,并且想使所有派生类不可复制且不可移动,那么声明在基类中删除的这些特殊成员函数就足够了吗?我想确保我的整个类层次结构是不可复制和不可移动的,并且想知道是否可以不必在每个派生类中将这4个特殊成员函数声明为已删除.我看到一个SO答案,似乎暗示着派生类尽管已从基类中删除了,但仍可以显式声明副本或移动构造函数,但以下示例在尝试定义默认的副本赋值运算符时导致编译错误,因此我不确定.这是错
..
我有以下课程示例,是从较大的项目简化而来的.它基于一个日志记录框架,该框架使用记录器的作用域终止析构函数中的日志条目. 下面的代码将无法编译,因为构造函数是一个隐式删除的函数( edit:不是true ),该函数似乎与std::ostringstream对象有关.我对此感到困惑,因为我认为我应该能够直接构造std::ostringstream,这意味着我应该能够直接构造Container对象
..
考虑一个类的以下两种可能的定义: 展览A: struct A { A() = delete; }; 图A': struct A { A() noexcept = delete; } 将已删除的函数声明为noexcept有什么意义吗? 解决方案 (最初将其发布为评论,但建议将其发布为答案.) 不,不.不能调用已删除的函数(或者在构造函数的情况下
..
为了使对象不可复制,我们可以显式删除其复制构造函数和复制赋值运算符。 我的问题是:什么是正确的地方-在公众,私有或受保护的部分?而且-这个选择有什么区别吗? 解决方案 在哪里做的正确选择-在该类的公共,私人或受保护的部分? 我会将它们放入 public 部分。 这是因为删除构造函数或赋值运算符与使它们成为 private / 受保护的;并且在不删除它们的情况下,它们默
..
我想知道为什么该程序无法编译(msvc,gcc和clang上的行为相同): #include using namespace std; struct Action { virtual void action() { cout
..
我是游戏开发的新手,非常新的c ++,但我已经开始开发一个小Arkanoid游戏。我以前已经运行它,但重构后(介绍ArkanoidGame类)它不编译,我不能弄清楚为什么。 我得到的错误是: d:\dropbox\development\gamedev\c ++ \arkanoid\arkanoid\main.cpp 14):error C2280: 'ArkanoidGame ::
..
我需要帮助 [io](f)流的不可复制性质。 我需要为 fstream 提供一个hackish包装,以便处理在Windows上的文件名中带有unicode字符的文件。为此,我设计了一个包装器函数: bool open_ifstream(istream& stream,const string& filename) { #ifdef __GLIBCXX__ FILE * res
..
这涉及C ++问题的解决方案 http:/ /www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1402 。摘要: 模板
..
工作草案明确调用 defaulted-functions 必须是特殊成员函数(例如,copy-constructor,default-constructor等,§8.4.2.1-1)。 但是,我没有在 deleted-functions (§8.4.3)中看到任何这样的限制。是这样吗? 或者换句话说,这三个例子有效 c ++ 0 ? struct Foo { // 1
..
工作草案明确调用 defaulted-functions 必须是特殊成员函数(例如,copy-constructor,default-constructor等,§8.4.2.1-1)。 但是,我没有在 deleted-functions (§8.4.3)中看到任何这样的限制。是这样吗? 或者换句话说,这三个例子有效 c ++ 0 ? struct Foo { // 1
..
阅读此最新问题 by @Mehrdad,其中类应该是不可移动,因此不可复制,我开始怀疑是否有一个类可以复制但不移动。从技术上讲,这是可能的: struct S { S(){} S(S const& s){} S(S&&)= delete; }; S foo() { S s1; S s2(s1); // OK(可复制) return s1; //错误! (不
..
根据标准, 如果类X的定义没有显式声明一个移动构造函数,作为默认值(如果且仅当 ) - X没有用户声明的复制构造函数, 没有用户声明的复制赋值运算符, - X没有用户声明的移动赋值运算符, - X没有用户声明的析构函数。 b $ b #include class Foo { public: Foo()= default;
..
使用旧版本的g ++(4.8.0,MinGW)编译项目我发现此代码无法编译: template void foo()= delete; 模板 void foo(){} int main(){ foo() return 0; } 似乎g ++甚至没有尝试寻找显式专用化 mitali
..
我最初发布这个问题只是关于析构函数,但现在我添加了默认构造函数的考虑。这是原来的问题: 如果我想给我的类一个析构函数是虚拟的,但是 否则相同编译器会生成什么,我可以使用 = default : Widget { public: virtual〜Widget()= default; }; 但是似乎我可以得到相同的效果与更少的打字使用 空定义: cla
..