草庐IT

c++ - 标准库实现是否允许具有与 C++ 标准不同的类定义?

以下代码使用clang和MSVC成功编译,但在GCC6.1.0中编译失败。#includetemplateT*test(R(T::*)(Args...)const){returnnullptr;}intmain(){usingT=std::shared_ptr;T*p=test(&T::get);}带有以下错误信息prog.cc:Infunction'intmain()':prog.cc:13:16:error:invalidconversionfrom'std::__shared_ptr*'to'T*{akastd::shared_ptr*}'[-fpermissive]T*p=te

c++ - 将 std::atomic 与对齐的类一起使用

我有一个mat4类,一个使用sse内在函数的4x4矩阵。此类使用_MM_ALIGN16对齐,因为它将矩阵存储为一组__m128的。问题是,当我声明atomic,我的编译器对我大喊:f:\programfiles(x86)\microsoftvisualstudio12.0\vc\include\atomic(504):errorC2719:'_Val':formalparameterwith__declspec(align('16'))won'tbealigned当我尝试传递任何与_MM_ALIGN16对齐的类时,我遇到的错误相同作为函数的参数(不使用const&)。如何声明我的mat

c++ - 通过 typeid 的类的数字唯一标识符

C++中的typeid运算符返回一个std::type_info类的对象,该对象可以产生其文本名称。但是,我只是对获取任何多态类的唯一数字标识符感兴趣。(在单个程序运行范围内是唯一的-不一定在运行之间)实际上,我可以只取消引用指针并读取vptr的内容——但这既不优雅也不可移植。我更喜欢便携的方式。我能否以某种方式使用typeid运算符为一个类设置一个“安全”的数字标识符?例如,对于给定类的每个typeid调用,我可以指望生成的std::type_info结构的地址相同吗?或者可能是name()指针本身? 最佳答案 std::type

c++ - 多个文件中的类实现

我正在尝试在不同的cpp文件中实现一个类。我知道如果成员函数是独立的,那么在C++中这样做是合法的。然而,其中一个成员函数使用另一个成员函数,例如在这种情况下:在function1.cpp中#include"myclass.h"voidmyclass::function1(){function2();}在function2.cpp中#include"myclass.h"voidmyclass::function2(){....}我会得到一个未定义的对function2的引用的错误。添加这个指针也不起作用。我需要在function1.cpp中以某种方式声明它吗?谢谢~头文件包含两个函数的

c++ - 模板函数中使用的类的前向声明不是由 clang++ 编译的

有这个代码:classA;templatevoidfun(){Aa;}classA{public:A(){}};intmain(){fun();return0;}g++4.5和g++4.7编译它没有错误。但是clang++3.2(trunk)给出了这个错误:main.cpp:5:6:error:variablehasincompletetype'A'Aa;^main.cpp:1:7:note:forwarddeclarationof'A'classA;^那么根据C++标准,哪个编译器是正确的? 最佳答案 Whichcompileri

c++ - 具有静态成员的类与单例

只有静态成员的类不就是一种单例设计模式吗?上这样的课有什么缺点吗?详细的解释会有所帮助。 最佳答案 这种类被称为monostate-它与单例有些不同。为什么使用单态而不是单态?在他们的originalpaper关于模式,Bell&Crawford提出了三个原因(由我解释):更自然的访问语法单例没有名字更容易继承我必须承认,我没有发现其中任何一个特别引人注目。另一方面,单态绝对不比单态差。 关于c++-具有静态成员的类与单例,我们在StackOverflow上找到一个类似的问题:

c++ - 如何导出从 std::runtime_error 派生的类?

我已经建立了一个库,提供从标准异常派生的异常类:#include#includeclassBaseException:publicstd::runtime_error{public:BaseException(std::stringconst&msg);};到目前为止,一切都很好。在Unix上编译和处理得很好。现在我正在准备将其编译成WindowsDLL:#ifdefWIN32#defineMY_EXPORT__declspec(dllexport)#else#defineMY_EXPORT#endif#include#includeclassMY_EXPORTBaseExceptio

c++ - 使用现代 C++ 时,具有私有(private)构造函数的类的 std::vector 无法编译

我正在处理的代码最初是使用C++03设计的,并使用g++-std=c++03编译和运行而不会出错.我的目标是使用g++-std=c++17编译相同的代码.代码中包含MyClass其中包含NestedClass.仅限MyClass应该能够使用、创建和修改NestedClass的实例,存储在std::vector.因此NestedClass包含一个私有(private)构造函数,并声明MyClass和std::vector作为friend。小例子:#includeclassMyClass{public:classNestedClass{friendclassMyClass;friendcl

具有静态成员的 C++ 模板类 - 对所有类型的类都相同

如果您有一个带有静态变量的模板类,有没有办法让该变量在该类的所有类型中都相同,而不是每个类型?目前我的代码是这样的:templateclasstemplateClass{public:staticintnumberAlive;templateClass(){this->numberAlive++;}~templateClass(){this->numberAlive--;}};templateinttemplateClass::numberAlive=0;还有主要的:templateClasst1;templateClasst2;templateClasst3;cout这个输出:T1:

c++ - 嵌套类的类内 friend 是否可以访问外部类成员?

clang++、g++和MSVCdisagreeonthiscode:classA{private:enumclassE{NO,YES};classB{private:friendEf1(){returnE::YES;}//friendEf2();};};//A::Ef2(){returnA::E::YES;}intmain(){}clang++接受所示代码。g++和MSVC在f1中提示那A::E无法访问。如果函数f2未注释,所有三个编译器都在其定义中提示A::E无法访问。是f1实际上有效吗?我找到的相关标准件是:[class.access.nest]:Anestedclassisam