问题标签 [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 投票
2 回答
144 浏览

c++ - 添加 std::vector到容器的变体

我包装了一个 C 接口,它有一个返回一个Value*对象的加载函数,它指向一个动态的Value对象数组:

给定数组中的对象始终属于同一类型。

我的想法是在 C++ 中表示如下:

这是合理的吗?我应该注意哪些陷阱?关于如何定义 bool 是否存在编译器特定的问题?我意识到 std::vector 在内部使用位表示,并且在这方面还有其他问题。

我正在使用 C++98 编译器。

0 投票
2 回答
116 浏览

c++ - 将 Foo& 添加到 std::vector

我正在为以下界面编写一个模拟:

因此,在实现中,我希望将每次发送的内容保存在向量中,如下所示:

_storedContainers 应该有什么类型,_storedContainers 是 mock 的成员?

0 投票
1 回答
1249 浏览

c++ - 模板 shared_ptr 参数

我收到此代码的编译器错误:

如下:

我究竟做错了什么?

如果我用这个替换模板化函数,代码编译得很好:

如果我用这个替换它,它也会编译:

如果我按如下方式传入第二个参数,它也会编译:

这也不编译:

更新

这是另一个例子:

0 投票
1 回答
299 浏览

c++ - 将值附加到容器的变体

我有一个容器变体如下:

我从一个 ValueContainer 对象(一个 C 结构)填充一个 Container 对象,如下所示:

我不能随意更改 C 结构。

尽管容器类型永远不会改变,但我不喜欢填充容器的解决方案,因为我正在访问每个循环。感觉有更好的做法。你能帮我吗?

这是C联合:

0 投票
3 回答
328 浏览

c++ - C++98 标准在哪里指定对静态成员的调用何时依赖于模板?

使用 Clang 3.0 -std=c++98 编译,接受以下代码:

取消注释 'f' 的重载会导致 Clang 报告错误“在依赖类型名称之前缺少 'typename'”。G++ 4.8 报告有或没有重载的相同错误。无论有没有过载,msvc10 都不会给出任何错误。

标准在哪里说明“f”是否依赖以及是否需要“typename”?如果不需要'typename',标准在哪里说明在这种情况下是否应该执行重载解析?

编辑:

澄清一下:我提到重载解析的原因是可能需要执行重载解析来确定常量表达式“sizeof(f(0))”的值。如果(我假设)在确定表达式是否依赖于类型时不执行重载决议,那么常量表达式“sizeof(f(0))”的值是不可能确定的(在解析时)何时依赖重载'f' 存在:例如

使用 Clang 3.0 -std=c++98 编译,不会产生错误。这对我来说似乎是正确的,因为如果一个表达式是一个 id 表达式,它命名一个用依赖类型声明的对象,那么标准认为它是依赖于类型的。

0 投票
2 回答
746 浏览

c++ - 读一本c++ 11的书需要有c++98的知识吗?

我目前正在阅读一本写于 2000 年的 C++ 书,这基本上意味着使用的是 c++ 98。(如果我错了,请纠正我)

我的问题是,阅读大多数用户建议的像这样的一本 c++11 书(https://rads.stackoverflow.com/amzn/click/0321563840),需要我已经阅读过一本 c++98 书?

0 投票
2 回答
19396 浏览

c++ - 给出编译错误的 const 对象的向量

我在我的代码中声明了以下内容

我收到以下编译错误 -

但如果声明——

我的代码编译。

在这种情况下不允许使用 const 吗?

我在这里复制我的代码供大家参考 -

0 投票
1 回答
139 浏览

c++ - 在 cv 限定符是唯一区别的指针类型之间转换的规则

这个问题特别与 C++98 相关,但如果您愿意,可以随意提供任何关于更新标准的有用信息。

如果您知道答案并想跳过其余部分,那么简短而有趣的是:

为什么要在声明中对const权?如果允许声明 for ,某人可能会做出什么邪恶的事情?volatileyx

在标准的第4.4.4节中它说:

转换可以在多级指针中第一个以外的级别添加 cv 限定符,但须遵守以下规则:

如果存在类型 T 和整数n > 0,则两个指针类型 T1 和 T2 是相似的,使得:

  • T1 是 CV10 点到 CV11 点到 ... CV1N T
  • T2 是 CV20 点到 CV21 点到 ... CV2N T

...其中每个 CVij 是 const、volatile、const volatile 或什么都没有。指针类型中第一个之后的cv 限定符的 n 元组,例如指针类型 T1 中的 CV11、CV12、...、CV1N,称为指针类型的cv 限定签名。如果满足以下条件,则T1 类型的表达式可以转换为 T2 类型

  1. 指针类型相似
  2. 对于每个j > 0,如果 const 在 CV1j 中,则 const 在 CV2j 中,对于 volatile 也是如此。
  3. 如果 CV1j 和 CV2j 不同,则 const 在每个 CV2k 中,因为0 < k < j

...然后继续给出一个将 a 分配给 a 的**示例const**。上面的重点是我的,斜体来自文档。

将其放入代码中:

我对一些细节有点模糊......所以这里有一些问题或可能有缺陷的观察:

1)它说at levels other than the first;这不再详细说明,但CV20可以是任何有效的 CV 限定词。

2)底部的第三条规则说,如果 T2在 level 处添加constOR ,则 levels必须是 const (或遭受愤怒)。在下文中,星号的数量与顶部的星号不同,以强调第三条规则所说的内容:volatilej1 ... j-1

我明白为什么需要它z,但为什么需要y需要呢?以下是 4.4.4 中示例的大致样子,针对 volatile 情况进行了修改:

那里可以放什么邪恶?

0 投票
1 回答
447 浏览

vector - 如何在c ++ 98中从非常量向量中获得一个常量迭代器

我正在编写一个无法声明为 const 的函数,因为它在其属性之一上使用了迭代器,而且我不知道如何在不使用 cbegin() 和 cend() 的情况下从非 const 向量中提取 const 迭代器. 我的编译器无法识别此功能。

谢谢你的帮助。

0 投票
3 回答
6262 浏览

multithreading - C++ 98 和线程

我正在使用开源图像处理库 OpenCV,由于我的算法很复杂,我需要使用多个线程进行视频处理。

在 C++ 98 上如何实现多线程?我知道 C++ 11 有一个内置的线程支持库(std::thread),但我的平台(MSVC++ 2010)没有。我还阅读了Boost库,它是 C++ STL 的通用扩展,具有多线程方法。我还知道通过MSDN支持 (windows.h) 我可以为 Windows 应用程序创建和管理线程。最后,我发现Qt 库,一个跨平台的 GUI 解决方案,支持线程。

是否有一种天真的方式(没有任何 3rd 方库)来创建跨平台多线程应用程序?