问题标签 [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++ - 添加 std::vector到容器的变体
我包装了一个 C 接口,它有一个返回一个Value*
对象的加载函数,它指向一个动态的Value
对象数组:
给定数组中的对象始终属于同一类型。
我的想法是在 C++ 中表示如下:
这是合理的吗?我应该注意哪些陷阱?关于如何定义 bool 是否存在编译器特定的问题?我意识到 std::vector 在内部使用位表示,并且在这方面还有其他问题。
我正在使用 C++98 编译器。
c++ - 将 Foo& 添加到 std::vector
我正在为以下界面编写一个模拟:
因此,在实现中,我希望将每次发送的内容保存在向量中,如下所示:
_storedContainers 应该有什么类型,_storedContainers 是 mock 的成员?
c++ - 模板 shared_ptr 参数
我收到此代码的编译器错误:
如下:
我究竟做错了什么?
如果我用这个替换模板化函数,代码编译得很好:
如果我用这个替换它,它也会编译:
如果我按如下方式传入第二个参数,它也会编译:
这也不编译:
更新:
这是另一个例子:
c++ - 将值附加到容器的变体
我有一个容器变体如下:
我从一个 ValueContainer 对象(一个 C 结构)填充一个 Container 对象,如下所示:
我不能随意更改 C 结构。
尽管容器类型永远不会改变,但我不喜欢填充容器的解决方案,因为我正在访问每个循环。感觉有更好的做法。你能帮我吗?
这是C联合:
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 表达式,它命名一个用依赖类型声明的对象,那么标准认为它是依赖于类型的。
c++ - 读一本c++ 11的书需要有c++98的知识吗?
我目前正在阅读一本写于 2000 年的 C++ 书,这基本上意味着使用的是 c++ 98。(如果我错了,请纠正我)
我的问题是,阅读大多数用户建议的像这样的一本 c++11 书(https://rads.stackoverflow.com/amzn/click/0321563840),需要我已经阅读过一本 c++98 书?
c++ - 给出编译错误的 const 对象的向量
我在我的代码中声明了以下内容
我收到以下编译错误 -
但如果声明——
我的代码编译。
在这种情况下不允许使用 const 吗?
我在这里复制我的代码供大家参考 -
c++ - 在 cv 限定符是唯一区别的指针类型之间转换的规则
这个问题特别与 C++98 相关,但如果您愿意,可以随意提供任何关于更新标准的有用信息。
如果您知道答案并想跳过其余部分,那么简短而有趣的是:
为什么要在声明中对const
权?如果允许声明 for ,某人可能会做出什么邪恶的事情?volatile
y
x
在标准的第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 类型:
- 指针类型相似
- 对于每个j > 0,如果 const 在 CV1j 中,则 const 在 CV2j 中,对于 volatile 也是如此。
- 如果 CV1j 和 CV2j 不同,则 const 在每个 CV2k 中,因为0 < k < j
...然后继续给出一个将 a 分配给 a 的**
示例const**
。上面的重点是我的,斜体来自文档。
将其放入代码中:
我对一些细节有点模糊......所以这里有一些问题或可能有缺陷的观察:
1)它说at levels other than the first
;这不再详细说明,但CV20
可以是任何有效的 CV 限定词。
2)底部的第三条规则说,如果 T2在 level 处添加const
OR ,则 levels必须是 const (或遭受愤怒)。在下文中,星号的数量与顶部的星号不同,以强调第三条规则所说的内容:volatile
j
1 ... j-1
我明白为什么需要它z
,但为什么需要y
需要呢?以下是 4.4.4 中示例的大致样子,针对 volatile 情况进行了修改:
那里可以放什么邪恶?
vector - 如何在c ++ 98中从非常量向量中获得一个常量迭代器
我正在编写一个无法声明为 const 的函数,因为它在其属性之一上使用了迭代器,而且我不知道如何在不使用 cbegin() 和 cend() 的情况下从非 const 向量中提取 const 迭代器. 我的编译器无法识别此功能。
谢谢你的帮助。