问题标签 [c++03]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++:类/结构是否在编译时初始化?
假设我Foo
用构造函数编写了一个类Foo(int)
。我有这段代码:
如果我在代码中使用常量调用构造函数,例如Foo(2)
,编译器是运行一次并存储运行时的结果,还是在运行时执行?结构/类是否仅包含 POD 数据类型是否相同?
假设它在运行时执行(我相信是这种情况),有没有办法让它在编译时运行,或者具有与运行时相同的效果?
编辑:恐怕我没有说清楚。我指的Foo(2)
是代码部分,它是完全不可变的。另外,我无法使用 C++11(我正在使用 GCC 4.1 并且无法升级),因此constexpr
虽然有效,但不适合我。
algorithm - 将 stl 映射转换为基于数值的键的排序列表的好算法
我有一个类型为 stl 的地图:
在哪里
如果我想返回一个对象列表(std::list< Object* >),那么按照 baseObject.ID 的顺序对其进行排序的最佳方法是什么?
我只是一直在寻找每个数字或其他东西吗?我不想将地图更改为提升地图,尽管我不一定反对做一些自包含在返回函数中的事情,比如
编辑:也许我应该遍历并将 obj->baseobj 复制到 baseobj.ID->obj 的映射中?
c++ - 如何防止从 c++03 中的类型派生?
C++11 引入了关键字final
,这使得从类型派生是非法的。
有没有办法用 C++03 实现类似的结果,也许是通过制作某些成员函数private
?
emulation - 在 C++03 auto_ptr 为什么不调用编译器生成的 copy-ctor?
我了解auto_ptr
C++03 中的工作原理。它基于这个技巧。当编写这样的代码时,该技巧使用用户定义的转换将指针从一个对象窃取到另一个对象auto_int p(auto_int(new int()));
。但是,我在这方面有几个问题。
- 为什么不调用编译器生成的 copy-ctor?
- 为什么用户定义的转换优先于编译器生成的复制ctor?
- 是否有编译器生成的 copy-ctor 开头?
- 如果不是,什么语言规则禁止它?
c++ - 如何获取析构函数的成员函数指针?
假设我有
X::~X()
C++03 中的成员函数指针是什么类型以及如何获取?
我不想实际调用它,只需在 SFINAE 中使用来确定给定类型是否存在析构函数。
c++ - 对于频繁创建和删除的游戏对象,我应该使用什么容器?
我正在做一个游戏,我创建对象并经常杀死它们。我必须能够线性循环对象列表,下一个对象总是比上一个对象更新,因此对象的渲染将是正确的(它们将重叠)。我还需要能够将每个对象的指针存储到四叉树中,以便快速找到附近的对象。
我的第一个想法是使用std::list
,但我以前从未做过这样的事情,所以我正在寻找专家对此的想法。
我应该使用什么容器?
编辑:我不只是从前面删除:对象可以按任何顺序被杀死,但它们总是被添加到列表的末尾,所以最后一项是最新的。
c++ - 为什么联合不允许其元素具有用户定义的构造函数?
当第一个结构有构造函数时,如何使第二个结构工作?我得到错误:
编码:
我可以使用一个函数来初始化 xyz 结构,但它不会慢很多吗?更不用说:我有大量的结构,我需要创建自己的函数,其前缀为 init_xyz() 等,这并不好。有没有其他方法可以解决这个问题?
c++ - 在 C++ 库中动态阻止函数的使用
我们有一个创建为.lib和.dll的库(这是一个完全用 C++ 编写的 Windows 平台的大型库)。用户可以在他们的程序或库中或他们想要使用的任何地方使用该库。
但是我想将某些功能限制为某些用户。
例如,让我们说,
- 我们的库有 3 个函数
foo()
,bar()
和hoo()
. - 用户A为这些功能付费
foo()
,bar()
并且hoo()
。 - 用户B为功能
bar()
和hoo()
.
因此,当我们向B提供库文件(headers/libs/dlls 等)时,
- 我们可以创建我们库的副本并删除 foo() 函数及其相关内容并将其发送给B
或者我们可以将整个库发送给他,并通过某种方式阻止他使用
foo()
.- 第一种方法不好,因为它是一项巨大的工作,并且必须小心依赖关系。即使我们确实知道
bar()
并且hoo()
不依赖于foo()
,删除东西并给他们一个定制版本的 lib 仍然是一件令人头疼的事情,其中还包括更多的测试。维护将更加成问题。SVN也会很混乱。 - 第二种方法是我猜的最好方法。但是怎么做呢?
- 第一种方法不好,因为它是一项巨大的工作,并且必须小心依赖关系。即使我们确实知道
如果Bfoo()
以后为功能付费怎么办?那我就得让他用了。
我想现在你明白了这个问题。这两种方式只是我的观点,也许我对它们的结论也可能是错误的。所以,我问是否有人对此事有任何想法/建议。
c++ - C++ 和 C 中的联合初始化
我在定义为的头文件中构建了一个使用常量的工作 C 库
我知道.raw
初始化程序是仅限 C 的语法。
如何在其中定义带有联合的常量,以便我可以在 C 和 C++ 中使用它们。