问题标签 [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.
c++ - 使用 C++-98 实现 Meyers Singleton 线程安全
目前我有这个迈耶单例的实现:
现在我需要一些改进来让这个代码在 C++-98 和 VS-2008 中线程安全?!
谢谢!
PS:什么不清楚?您会看到标签 visual-studio-2008 和 c++-98 -> 所以目标操作系统是 Windows!我也不明白为什么我投了反对票,只是有些人根本不喜欢 Singleton 的!
c++ - 我可以在编译时使用一个常数来选择一个类,可能使用模板吗?
假设我有一个常量值(可能是某种枚举类型)。假设我有很多 A、B、D 等课程。
我可以有这样的东西吗?
那么,是否可以在编译时根据常数选择一个类?
一般的问题是我试图选择一个基于表的函子,其中索引是一个枚举。如果可能的话,我想避免多态性。
编辑:对于这个项目,我不能使用 C++11,无论如何都要感谢在那个上下文中回答的人,无论如何都很有趣。
编辑 2:通常我可以有 2 个以上的目标类,我已经编辑了我的问题
c++ - 以最紧凑的方式调用默认(AKA 无参数)构造函数
我查看了许多问答,但我找不到这个问题的确切答案。
对于这样的课程:
在普通的 C++98 中,如何保证在声明时以最紧凑的方式调用默认(无参数)构造函数?
(对于它的价值,我在这里尝试过,在这种情况下它有效,但谁知道堆栈中有哪些值......)
注意:A 类最终必须比示例中显示的更复杂。
c++ - 将多个值插入向量
我有一个std::vector<T>
变量。我还有两个 T 类型的变量,第一个表示要插入的向量中的值,而第二个表示要插入的值。
所以可以说我有这个容器:1,2,1,1,2,2
并且根据上面的定义,这两个值是 2 和 3。然后我想写一个函数来更新容器,而不是包含:
我正在使用 c++98 和 boost。我可以使用哪些 std 或 boost 函数来实现此功能?
遍历向量并使用 std::insert 是一种方法,但是当人们意识到您需要记住跳过刚刚插入的值时,它会变得混乱。
c++ - 将来自函数的值分配给静态 const 成员(更准确地说,来自静态方法)
以下是不允许的('std::numeric_limits::max()' 不能出现在常量表达式中):
这可能是获得所需行为的最佳方式?如果可能的话,我希望在编译时知道 INVALID_VALUE(例如,允许编译器进行更好的优化)。
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 的结构的整数数组进行零初始化时,它的行为标准吗?或者这是一个编译器错误?
c++ - 包装 std::string 以在 boost::variant 中使用
我希望有一个 boost::variant 包含一系列不同的类型,包括 std::string 和我自己的名为 Path 的类。路径本身实际上是一个字符串,至少目前是这样,但就应用程序本身而言,它是一个非常不同的概念,当访问它时,我会用这个字符串做非常不同的事情。现在我当然不能简单地将路径类型定义为 std::string,那么定义我的 Path 类的最佳方法是什么?
更新
这是我的解决方案:
c++ - C++ 类型检查错误
我按照上一篇文章中的说明重新编写了我的代码。
我的头文件
然后我有一个函数用 tour 和guidedTour 对象填充“列表”向量。
但是,我似乎总是要找回 Tour 对象。EG:它总是打印 NOT Guided Tour。
如何归档多态行为?
你能请教吗?(我是 C++ 新手)我需要使用 C++98
非常感谢
c++ - 有条件地迭代某些项目
我在我的代码中迭代了很多这样的项目:
有没有更好的方法来做到这一点,也许使用 std 或 boost?
另一个例子: