草庐IT

c++ - 在类本身中创建类的实例

这个问题在这里已经有了答案:Canac++classincludeitselfasanmember?(4个答案)关闭8年前。我是C++新手,有一个问题:比较以下代码:classNode{public:intdata;Node*x;};和classNode{public:intdata;Nodex;};我知道第二部分代码无法通过编译。但我想知道原因。它与内存分配有关还是仅与语法规则有关?如果有人能解决我的问题,我将不胜感激。

c++ - 在用 C++ 编程时,向您的合作程序员展示某些方法尚未在类中实现的方法

什么时候可以使用什么方法:您与其他几位(例如1-3位)程序员合作完成一个小型C++项目,您使用一个存储库你创建一个类,声明它的方法你还没有时间实现所有的方法您还不想让其他程序员使用您的代码(因为它还没有实现);或者不想使用代码中尚未实现的部分你没有时间/可能向你的同事讲述所有这些尚未实现的事情当您的同事使用您尚未实现的代码时,您希望他们立即意识到他们不应该使用它-如果他们遇到错误,您不希望他们想知道哪里出了问题,搜索潜在的错误等。 最佳答案 最简单的答案就是告诉他们。与一群人一起工作时,沟通是关键。一个更稳健(也可能是最好)的选择是

c++ - 检查成员是否在类中声明

是否可以检查给定类中的成员变量、成员函数或类型定义是否声明?StackOverflow上的各种问题都谈到检查给定类是否仅包含一个成员,本质上是使用std::is_detected。但是所有这些解决方案也在派生类中检测成员,派生类可能不会自己声明成员。例如,以下代码无法编译。#includestructbase{usingtype=std::true_type;};structderived:publicbase{};templateusinghas_type_t=typenameT::type;templateconstexprinlineboolhas_type_v=std::exp

c++ - 在类外部初始化的 constexpr 静态成员的声明中是否需要 constexpr 说明符?

C++17§10.1.5/1声明:Theconstexprspecifiershallbeappliedonlytothedefinitionofavariableorvariabletemplateorthedeclarationofafunctionorfunctiontemplate.Afunctionorstaticdatamemberdeclaredwiththeconstexprspecifierisimplicitlyaninlinefunctionorvariable(10.1.6).Ifanydeclarationofafunctionorfunctiontempla

c++ - 在类之间共享对象的好方法是什么?

在类层次结构中的多个类之间共享对象实例的好方法是什么?我有以下情况:classtexture_manager;classworld{...std::vectorobjects_;skyboxskybox_;}我目前将texture_manager实现为单例,客户端从代码中的任何位置调用它的实例化方法。texture_manager需要被objects_vector中的object使用,被skybox_使用,并且可能被其他类使用好吧,它可能是也可能不是world类的一部分。当我试图限制在我的代码中使用单例时,您是否推荐这种方法的任何替代方法?想到的一种解决方案是将texture_mana

c++ - 为什么不能在类范围内推导我的类静态自动函数的类型?

我正在尝试获取auto函数的返回类型。Thisworks:autofoo(intbar){return0;}typedefstd::result_offoo_t;太好了,接下来是下一步:获取类作用域中staticauto函数的返回类型。Thisalsoworks:structFoo{staticautofoo(intbar){return0;}};typedefstd::result_offoo_t;但是thisdoesn'twork:structFoo{staticautofoo(intbar){return0;}typedefstd::result_offoo_t;};GCC说“错

c++ - 在类中声明但未定义的方法

我有一个类,它声明了一个方法但没有实现它。该方法不是虚函数。在对应的cpp文件中我没有找到相同方法的定义。类中声明的所有其他方法均已定义。我编译了代码,一切顺利。我的印象是cpp必须强制定义声明的方法。如果有人可以详细说明,我将不胜感激。我正在使用VS2010的cl编译器。 最佳答案 您的代码可以编译,但会出现链接错误。构建项目的可执行文件包括两个阶段:编译链接在编译期间,编译器只是通过验证语言语义将源代码翻译成目标代码。在链接期间,链接器实际上查找符号的定义并从多个目标文件(在编译期间创建)创建可执行文件。编译器分别编译每个翻译单

c++ - 为什么有时在类内部定义 C++ 方法?

我经常在C++中遇到大型非模板类,其中简单的方法直接在头文件的类主体中定义,而不是单独在实现文件中定义。例如:classFoo{intgetBar()const{returnbar;}...};为什么要这样做?好像也有缺点。实现没有达到应有的隐藏程度,代码可读性较差,如果类的头文件包含在许多不同的地方,也会增加编译器的负担。我的猜测是人们打算将这些函数内联到其他模块中,这可以显着提高性能。但是,我听说较新的编译器可以在跨模块的链接时进行内联(和其他过程间优化)。对这种链接时优化的支持有多广泛,它是否真的使这些定义变得不必要了?这些定义还有其他充分的理由吗?

c++ - 为什么 C++ 在类声明后有一个 ";"

这个问题在这里已经有了答案:Semicolonafterclassdeclarationbraces(8个答案)关闭9年前。我开始学习C++,只是出于好奇,为什么C++要求你在后面加上“;”在类声明的末尾例如:classA{/*...*/};在java等语言中,它用于表示语句的结束。有什么不同inti(5);和上面关于C++分号的类?编译器是将类视为语句还是对它有不同的解释?

c++ - extern C 不能在类级别使用?

只是想确认在Windows环境下,VSTS2008+C++项目,我们只能将externC应用到函数级别,不能应用到类级别(这样类中的所有成员函数都使用C语言名称修饰)?试了好几种方法,总是编译出错。提前致谢,乔治 最佳答案 您可以通过非常复杂(但完全合法)的hack将extern"C"应用于成员函数:extern"C"typedefintbar_t(intx);structfoo{bar_tbar;//yes,thisdeclaresanonstaticmemberfunction!};intfoo::bar(intx){retur