草庐IT

auto-delete

全部标签

c++ - `pair::operator=(pair&&)` 错误与 `auto&` 推断 move 操作 - libstdc++ 回归?

鉴于这个程序:structVal{Val()=default;Val(Val&&)=default;auto&operator=(Val&&);};/*PLACEHOLDER*/auto&Val::operator=(Val&&){return*this;}替换/*PLACEHOLDER*/与...intmain(){std::vector>v;v.emplace(std::begin(v),0,Val{});}...编译成功:g++6.2.0g++6.3.0g++7.0.1(主干)clang++3.9.1clang++5.0.0(HEAD)onwandbox替换/*PLACEHOLD

c++ - "auto"类型推导编译而显式类型给出错误

这个问题在这里已经有了答案:WhycanIuseautoonaprivatetype?(5个回答)关闭8年前。我正在使用VisualStudio2012,但我发现了一些奇怪的东西。我不是在写一些我必须在多个编译器之间兼容的东西,但它可能会在以后(当代码放在网络上时,用户不想得到编译器错误),但我不想写一些错误的东西,或者不是原生的。这是测试代码:classA{classB{public:inti;};BmyB;public:B&getB(){returnmyB;}};intmain(){Aa;A::B&b=a.getB();auto&b2=a.getB();}main中的第一行弹出er

c++ - "auto"类型推导编译而显式类型给出错误

这个问题在这里已经有了答案:WhycanIuseautoonaprivatetype?(5个回答)关闭8年前。我正在使用VisualStudio2012,但我发现了一些奇怪的东西。我不是在写一些我必须在多个编译器之间兼容的东西,但它可能会在以后(当代码放在网络上时,用户不想得到编译器错误),但我不想写一些错误的东西,或者不是原生的。这是测试代码:classA{classB{public:inti;};BmyB;public:B&getB(){returnmyB;}};intmain(){Aa;A::B&b=a.getB();auto&b2=a.getB();}main中的第一行弹出er

c++ - 对不完整类型的空指针调用 delete 是否合法?

如果是这样,为什么下面的代码会给我警告note:neitherthedestructornortheclass-specificoperatordeletewillbecalled,eveniftheyaredeclaredwhentheclassisdefined?structC;intmain(){C*c=nullptr;deletec;return0;}我理解如果C有非平凡的/虚拟的析构函数,为什么它可能在一般情况下是未定义的行为,但没有无论情况如何,标准保证/定义nullptr上的delete始终是noop?重申一下:我特别询问指向不完整类型的指针是nullptr!的情况

c++ - 对不完整类型的空指针调用 delete 是否合法?

如果是这样,为什么下面的代码会给我警告note:neitherthedestructornortheclass-specificoperatordeletewillbecalled,eveniftheyaredeclaredwhentheclassisdefined?structC;intmain(){C*c=nullptr;deletec;return0;}我理解如果C有非平凡的/虚拟的析构函数,为什么它可能在一般情况下是未定义的行为,但没有无论情况如何,标准保证/定义nullptr上的delete始终是noop?重申一下:我特别询问指向不完整类型的指针是nullptr!的情况

c++ - 为什么绑定(bind)到引用类型时 "const auto [x, y]"的行为不符合预期?

以下代码片段摘自cppref:std::tuplef();auto[x,y]=f();//decltype(x)isint//decltype(y)isint&constauto[z,w]=f();//decltype(z)isconstint//decltype(w)isint&我的问题在最后一行:为什么是decltype(w)int&而不是constint&? 最佳答案 Jarod42回答了评论中的问题,让我在这里引用标准的相关部分,来自[dcl.struct.bind]¹:GiventhetypeTidesignatedbys

c++ - 为什么绑定(bind)到引用类型时 "const auto [x, y]"的行为不符合预期?

以下代码片段摘自cppref:std::tuplef();auto[x,y]=f();//decltype(x)isint//decltype(y)isint&constauto[z,w]=f();//decltype(z)isconstint//decltype(w)isint&我的问题在最后一行:为什么是decltype(w)int&而不是constint&? 最佳答案 Jarod42回答了评论中的问题,让我在这里引用标准的相关部分,来自[dcl.struct.bind]¹:GiventhetypeTidesignatedbys

c++ - 为什么运行时环境不能决定应用 delete 或 delete[] 而不是程序员?

我读到需要delete[]运算符,因为运行时环境不会保留有关分配的block是否是需要析构函数调用的对象数组的信息,但它确实实际上保留了有关分配的block存储在内存中的位置的信息,当然还有block的大小。只需要一点元数据就可以记住是否需要在删除时调用析构函数,那么为什么不这样做呢?我很确定有一个很好的解释,我不是在质疑它,我只是想知道它。 最佳答案 我认为原因是C++不会强制你去做任何你不想要的事情。它会添加额外的元数据,如果有人不使用它,就会强加给他们额外的开销,这与C++语言的设计目标相反。当您想要您描述的功能时,C++确实

c++ - 为什么运行时环境不能决定应用 delete 或 delete[] 而不是程序员?

我读到需要delete[]运算符,因为运行时环境不会保留有关分配的block是否是需要析构函数调用的对象数组的信息,但它确实实际上保留了有关分配的block存储在内存中的位置的信息,当然还有block的大小。只需要一点元数据就可以记住是否需要在删除时调用析构函数,那么为什么不这样做呢?我很确定有一个很好的解释,我不是在质疑它,我只是想知道它。 最佳答案 我认为原因是C++不会强制你去做任何你不想要的事情。它会添加额外的元数据,如果有人不使用它,就会强加给他们额外的开销,这与C++语言的设计目标相反。当您想要您描述的功能时,C++确实

c++ - 返回指向 const 数据成员的 const 指针和 'auto' 关键字。有点迷茫

我最近一直在学习C++,今天才被介绍到const和const正确性的概念。为了更好地理解这个理论,我一直在编写一系列简单的程序来确保我正确理解了这个概念。我以为我什么都明白了,但是当在其中一个程序中使用auto关键字时,我似乎有点卡住了。为了测试我是否理解const指针的工作原理,我编写了一个简单的程序。我不会费心发布整个事情,因为它只有两个部分是相关的。我有一个具有int类型的const数据成员的类:constinttryToChangeMe;在这个类中,我还有一个成员函数,它返回一个指向上述constint的const指针:constint*constMyClass::test()