草庐IT

用不完

全部标签

c++ - 不完整类型的静态字段 - 合法吗?

在C++中声明类定义时不完整类型的静态字段是否合法?例如:Foo.h:classFoo{public://...private:classBar;staticBarsomething;};Foo.cpp:classFoo::Bar{//...};Foo::BarFoo::something;//somemorecode编译器似乎接受它,我看不出应该拒绝它的原因,但标准对这种情况有什么看法?我非常感谢有人直接引用标准,最好是“旧”标准(2003年的标准)。 最佳答案 是的,您正在做的事情是明确允许的(第9.4.2/2节):“静态数据成

c++ - 不完整类型的静态字段 - 合法吗?

在C++中声明类定义时不完整类型的静态字段是否合法?例如:Foo.h:classFoo{public://...private:classBar;staticBarsomething;};Foo.cpp:classFoo::Bar{//...};Foo::BarFoo::something;//somemorecode编译器似乎接受它,我看不出应该拒绝它的原因,但标准对这种情况有什么看法?我非常感谢有人直接引用标准,最好是“旧”标准(2003年的标准)。 最佳答案 是的,您正在做的事情是明确允许的(第9.4.2/2节):“静态数据成

c++ - 为什么在这种情况下转发引用不起作用?

#includeusingnamespacestd;templatevoidf1(T){}templatevoidf2(T&){}templatevoidf3(T&&){}intmain(){vectorcoll;f1(coll);//okf2(coll);//okf3(coll);//error:nomatchingfunctionforcallto'f3'}main.cpp(21,6):note:candidatetemplateignored:substitutionfailure[withT=>std::vector>&]:type'std::vector>&'cannotbe

c++ - 为什么在这种情况下转发引用不起作用?

#includeusingnamespacestd;templatevoidf1(T){}templatevoidf2(T&){}templatevoidf3(T&&){}intmain(){vectorcoll;f1(coll);//okf2(coll);//okf3(coll);//error:nomatchingfunctionforcallto'f3'}main.cpp(21,6):note:candidatetemplateignored:substitutionfailure[withT=>std::vector>&]:type'std::vector>&'cannotbe

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++ - 错误 - 不完整类型/前向声明的无效使用

我知道我的问题很常见,但我一直在搜索并尝试找到的所有解决方案,但仍然无法正常工作。所以任何帮助将不胜感激!=)提前致谢!我在编译时遇到这个错误:g++-ISFML/include-Iclasses/-W-Wall-Werror-c-oclasses/Object.oclasses/Object.cppInfileincludedfromclasses/Core.hh:18:0,fromclasses/Object.hh:4,fromclasses/Object.cpp:1:classes/MapLink.hh:9:1:error:invaliduseofincompletetype‘s

c++ - 错误 - 不完整类型/前向声明的无效使用

我知道我的问题很常见,但我一直在搜索并尝试找到的所有解决方案,但仍然无法正常工作。所以任何帮助将不胜感激!=)提前致谢!我在编译时遇到这个错误:g++-ISFML/include-Iclasses/-W-Wall-Werror-c-oclasses/Object.oclasses/Object.cppInfileincludedfromclasses/Core.hh:18:0,fromclasses/Object.hh:4,fromclasses/Object.cpp:1:classes/MapLink.hh:9:1:error:invaliduseofincompletetype‘s

c++ - 删除指向不完整类型和智能指针的指针

当尝试使用带有前向声明声明的类型的auto_ptr时,如下所示:classA;...std::auto_ptra;A的析构函数没有被调用(显然,因为auto_ptr内部delete的底层指针和不完整类型的析构函数不能叫做)。但是,相同的代码可以正常工作,并且在使用std::shared_ptr而不是std::auto_ptr时会调用析构函数。怎么解释? 最佳答案 一个shared_ptr可以用不完整的类型声明,是的。在初始化或重置类型之前,该类型不需要完整。当您初始化或重置shared_ptr为了指向一个新对象,它创建了一个“删除器

c++ - 删除指向不完整类型和智能指针的指针

当尝试使用带有前向声明声明的类型的auto_ptr时,如下所示:classA;...std::auto_ptra;A的析构函数没有被调用(显然,因为auto_ptr内部delete的底层指针和不完整类型的析构函数不能叫做)。但是,相同的代码可以正常工作,并且在使用std::shared_ptr而不是std::auto_ptr时会调用析构函数。怎么解释? 最佳答案 一个shared_ptr可以用不完整的类型声明,是的。在初始化或重置类型之前,该类型不需要完整。当您初始化或重置shared_ptr为了指向一个新对象,它创建了一个“删除器