问题标签 [c++98]

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.

0 投票
1 回答
3271 浏览

c++ - 使用 C++-98 实现 Meyers Singleton 线程安全

目前我有这个迈耶单例的实现:

现在我需要一些改进来让这个代码在 C++-98 和 VS-2008 中线程安全?!

谢谢!

PS:什么不清楚?您会看到标签 visual-studio-2008 和 c++-98 -> 所以目标操作系统是 Windows!我也不明白为什么我投了反对票,只是有些人根本不喜欢 Singleton 的!

0 投票
3 回答
402 浏览

c++ - 我可以在编译时使用一个常数来选择一个类,可能使用模板吗?

假设我有一个常量值(可能是某种枚举类型)。假设我有很多 A、B、D 等课程。

我可以有这样的东西吗?

那么,是否可以在编译时根据常数选择一个类?

一般的问题是我试图选择一个基于表的函子,其中索引是一个枚举。如果可能的话,我想避免多态性。

编辑:对于这个项目,我不能使用 C++11,无论如何都要感谢在那个上下文中回答的人,无论如何都很有趣。
编辑 2:通常我可以有 2 个以上的目标类,我已经编辑了我的问题

0 投票
2 回答
212 浏览

c++ - 以最紧凑的方式调用默认(AKA 无参数)构造函数

我查看了许多问答,但我找不到这个问题的确切答案。

对于这样的课程:

在普通的 C++98 中,如何保证在声明时以最紧凑的方式调用默认(无参数)构造函数?

(对于它的价值,我在这里尝试过,在这种情况下它有效,但谁知道堆栈中有哪些值......)

注意:A 类最终必须比示例中显示的更复杂。

0 投票
3 回答
17579 浏览

c++ - isnan 在 std:: 命名空间中吗?更一般地说,什么时候 std:: 是必要的、可选的或应该避免的?

使用 Mingw 4.7.2,我有一个由于调用isnan. 如果我使用,编译器会说“一切都会好起来的”std::isnan起来的” ,实际上我设法编译了我的文件。

但是如果我在这里检查(编辑:但也许我也应该在这里检查:-)),std::似乎没有必要。如果我添加它,该文件是否可以移植?

更一般地说,对于每种情况,是否有一种通用的方法来理解何时放置std::是必要的(为了便携性)、可选的或应该避免的?

编辑

实际上,问题的根源之一是包含多个标头,并且一些包含的标头 include <cmath>,而此 cpp 文件尝试包含<math.h>(当<cmath>已经包含时)。

0 投票
4 回答
2634 浏览

c++ - 将多个值插入向量

我有一个std::vector<T>变量。我还有两个 T 类型的变量,第一个表示要插入的向量中的值,而第二个表示要插入的值。

所以可以说我有这个容器:1,2,1,1,2,2

并且根据上面的定义,这两个值是 2 和 3。然后我想写一个函数来更新容器,而不是包含:

我正在使用 c++98 和 boost。我可以使用哪些 std 或 boost 函数来实现此功能?

遍历向量并使用 std::insert 是一种方法,但是当人们意识到您需要记住跳过刚刚插入的值时,它会变得混乱。

0 投票
4 回答
122 浏览

c++ - 将来自函数的值分配给静态 const 成员(更准确地说,来自静态方法)

以下是不允许的('std::numeric_limits::max()' 不能出现在常量表达式中):

这可能是获得所需行为的最佳方式?如果可能的话,我希望在编译时知道 INVALID_VALUE(例如,允许编译器进行更好的优化)。

0 投票
3 回答
1084 浏览

c++ - c ++数组零初始化:这是一个错误,还是正确的?

注意:我们在这里谈论(据说)符合 C++98 的编译器。这不是 C++11 问题。

我们的一个编译器有一个奇怪的行为,我们不确定这是否正常或者这是一个编译器错误:

当 BBB 这样初始化时:

我们期望 BBB 的所有 POD 成员(包括 m_d,int 数组)都被初始化为零,并且 BBB 的所有非 POD 成员都被构造。

这适用于 AIX 的本机编译器、Linux/GCC-3.4、Windows/VisualC++ ......但不适用于 Solaris/SunStudio,其中只有非数组成员被零初始化。

我们在 C++98 标准(草案文档)中做了一些研究,发现以下内容:

[12.6.1 - 2]

当聚合(无论是类还是数组)包含类类型的成员并由大括号括起来的初始化器列表(8.5.1)初始化时,每个这样的成员都由相应的赋值表达式复制初始化(参见 8.5)。如果初始化器列表中的初始化器少于聚合的成员,则每个未显式初始化的成员都应默认初始化 (8.5)

然后:

[8.5 - 5]

对类型 T 的对象进行零初始化存储意味着:
如果 T 是标量类型 (3.9),则存储设置为转换为 T 的值 0(零);
— 如果 T 是非联合类类型,则每个非静态数据成员和每个基类子对象的存储都是零初始化的;
— 如果 T 是联合类型,则其第一个数据成员 89) 的存储是零初始化的;
— 如果 T 是数组类型,则每个元素的存储都是零初始化的;
— 如果 T 是引用类型,则不执行初始化。

接着:

默认初始化T 类型的对象意味着:
— 如果 T 是非 POD 类类型(第 9 条),则调用 T 的默认构造函数(如果 T 没有可访问的默认构造函数,则初始化是非良构的);
如果 T 是数组类型,则每个元素都是默认初始化的;
否则,对象的存储是零初始化的。

我读它的方式:SunStudio 应该零初始化整数数组 (BBB::m_d)

奇怪的是:如果我们从 AAA 中删除默认构造函数,那么 BBB 中的所有内容都是零初始化的。

问题:当 SunStudio 未能对包含非 POD 的结构的整数数组进行零初始化时,它的行为标准吗?或者这是一个编译器错误?

0 投票
0 回答
189 浏览

c++ - 包装 std::string 以在 boost::variant 中使用

我希望有一个 boost::variant 包含一系列不同的类型,包括 std::string 和我自己的名为 Path 的类。路径本身实际上是一个字符串,至少目前是这样,但就应用程序本身而言,它是一个非常不同的概念,当访问它时,我会用这个字符串做非常不同的事情。现在我当然不能简单地将路径类型定义为 std::string,那么定义我的 Path 类的最佳方法是什么?

更新

这是我的解决方案:

0 投票
1 回答
200 浏览

c++ - C++ 类型检查错误

我按照上一篇文章中的说明重新编写了我的代码。

我的头文件

然后我有一个函数用 tour 和guidedTour 对象填充“列表”向量。

但是,我似乎总是要找回 Tour 对象。EG:它总是打印 NOT Guided Tour。

如何归档多态行为?

你能请教吗?(我是 C++ 新手)我需要使用 C++98

非常感谢

0 投票
2 回答
752 浏览

c++ - 有条件地迭代某些项目

我在我的代码中迭代了很多这样的项目:

有没有更好的方法来做到这一点,也许使用 std 或 boost?

另一个例子: