Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

9
无效*是否有合法用途?
是否有合法使用 void*在C ++中吗?还是因为C引入了它? 回顾一下我的想法: 输入:如果要允许多种输入类型,则可以重载函数和方法,或者可以定义一个通用的基类或模板(感谢您在答案中提及)。在这两种情况下,代码都具有更多的描述性和更少的错误发生(假设基类以合理的方式实现)。 输出:我想不出比void*从已知基类派生的东西更喜欢接收的任何情况 。 只是为了弄清楚我的意思:我并不是在问是否有的用例void*,而是是否有void*最佳或唯一选择的用例。以下几个人已完美地回答了这个问题。
87 c++ 

8
如何为C ++代码生成调用图
我正在尝试生成调用图,通过该图可以找到击中特定函数的所有可能执行路径(这样我就不必手动找出所有路径,因为有许多路径可以导致该函数)。例如: path 1: A -> B -> C -> D path 2: A -> B -> X -> Y -> D path 3: A -> G -> M -> N -> O -> P -> S -> D ... path n: ... 我尝试了Codeviz和Doxygen,但无论如何,这两个结果都只显示目标函数D的被调用者。在我的情况下,D是类的成员函数,其对象将包装在智能指针中。客户端将始终通过工厂获得智能指针对象,以调用D。 有谁知道如何实现这一目标?


5
为什么未声明NULL?
当我尝试编译以下代码时,我对此结构构造器有疑问: typedef struct Node { Node( int data ) // { this->data = data; previous = NULL; // Compiler indicates here next = NULL; } int data; Node* previous; Node* next; } NODE; 当我来这个错误发生: \linkedlist\linkedlist.h||In constructor `Node::Node(int)':| \linkedlist\linkedlist.h|9|error: `NULL' was not declared in this scope| ||=== Build finished: 1 errors, …
87 c++  syntax  nodes 


4
现代C ++的实验功能对长期项目是否可靠?
我有一个当前使用C ++ 11/14的项目,但是它需要类似的东西std::filesystem,它仅在C ++ 17中可用,因此我目前没有机会使用它。但是,我看到它在我当前的编译器中可用std::experimental::filesystem。使用实验性功能是否是一个好主意,假设我将来可以添加以下内容: #ifdef CXX17 //if this is C++17 std::filesystem::something ...; #else std::experimental::filesystem::something ...; #endif 我担心的是: 1.是否保证所有兼容的编译器都具有相同的实验功能? 2.实验功能是否容易发生重大变化而使其不可靠? 也许还有更多事情想知道。为什么我应该或不应该使用它们?我为一个新项目感到困惑,不知道该怎么决定。

5
C ++中的无符号关键字
在C ++中,unsigned关键字是否默认为特定数据类型?我正在尝试为原型的类编写一个函数: unsigned Rotate(unsigned object, int count) 但是我真的不明白是什么unsigned意思。不应该是这样unsigned int吗?
87 c++  unsigned 




7
C / C ++:强制位字段顺序和对齐
我读到,结构中位字段的顺序是特定于平台的。如果我使用不同的特定于编译器的打包选项,那该如何保证数据在写入时以正确的顺序存储?例如: struct Message { unsigned int version : 3; unsigned int type : 1; unsigned int id : 5; unsigned int data : 6; } __attribute__ ((__packed__)); 在具有GCC编译器的Intel处理器上,这些字段如图所示布置在内存中。Message.version是缓冲区的前3位,然后Message.type是。如果我为各种编译器找到了等效的struct包装选项,这是否可以跨平台使用?

14
如何模拟“按任意键继续?”
我正在尝试编写一个C ++程序,其中当用户从键盘输入任何字符时,它应该移至下一行代码。 这是我的代码: char c; cin>>c; cout<<"Something"<<endl; 但这是行不通的,因为只有当我输入一些字符然后按Enter时,它才会移动到下一行。 要么 如果我用这个 cin.get() or cin.get(c) 当我按Enter键时,它将移至下一条指令。 但是我希望它移动到键盘上按下的任何键的下一行,该怎么办?
87 c++ 

4
导入库如何工作?细节?
我知道这对于极客来说似乎很基础。但我想使它变得清晰。 当我想使用Win32 DLL时,通常只调用LoadLibrary()和GetProcAdderss()之类的API。但是最近,我正在使用DirectX9进行开发,并且需要添加d3d9.lib,d3dx9.lib等文件。 我已经足够了解LIB用于静态链接,而DLL用于动态链接。 因此,我目前的理解是LIB包含方法的实现,并且在链接时作为最终EXE文件的一部分静态链接。DLL是在运行时动态加载的,而不是最终EXE文件的一部分。 但是有时,DLL文件会附带一些LIB文件,因此: 这些LIB文件是做什么用的? 他们如何实现目标? 有没有什么工具可以让我检查这些LIB文件的内部? 更新1 检查维基百科之后,我记得这些LIB文件称为import library。但是我想知道它如何与我的主应用程序以及动态加载的DLL一起使用。 更新2 就像RBerteig所说的那样,DLL附带的LIB文件中有一些存根代码。因此,调用顺序应如下所示: 我的主要应用程序-> LIB中的存根->实际目标DLL 那么这些LIB应该包含哪些信息?我可以想到以下几点: LIB文件应包含相应DLL的完整路径。因此,DLL可以由运行时加载。 每个DLL导出方法的入口点的相对地址(或文件偏移量?)应在存根中进行编码;因此可以进行正确的跳转/方法调用。 我对吗?还有更多吗? 顺便说一句:是否有任何工具可以检查导入库?如果我能看到它,就不会再有疑问了。
87 c++  c  windows  visual-c++ 

4
为什么功能模板不能部分专业化?
我知道语言规范禁止 对功能模板进行部分专业化。 我想知道为什么它禁止这样做的理由?它们没有用吗? template<typename T, typename U> void f() {} //allowed! template<> void f<int, char>() {} //allowed! template<typename T> void f<char, T>() {} //not allowed! template<typename T> void f<T, int>() {} //not allowed!

8
在标头和源(cpp)中创建C ++命名空间
将标头和cpp文件内容都包装在名称空间中还是只包装标头内容然后在cpp文件中使用名称空间之间有什么区别吗? 区别是指可能导致问题或我需要注意的任何排序性能损失或稍微不同的语义。 例: // header namespace X { class Foo { public: void TheFunc(); }; } // cpp namespace X { void Foo::TheFunc() { return; } } VS // header namespace X { class Foo { public: void TheFunc(); }; } // cpp using namespace X; { void Foo::TheFunc() { …
87 c++  namespaces 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.