Questions tagged «c++-faq»

提供协作式,社区编辑的C ++常见问题解答

5
未定义的行为和顺序点已重新加载
将此主题视为以下主题的续集: 上一期文章 未定义行为和顺序点 让我们重新看一下这个有趣而令人费解的表达(斜体字词来自上面的主题* smile *): i += ++i; 我们说这会调用未定义的行为。我相信,当这样说,我们隐含假设型的i是内置的类型之一。 如果什么类型的i是用户定义类型?说它的类型是本文Index后面定义的类型(请参阅下文)。它仍然会调用未定义行为吗? 如果是,为什么?它不等于写作i.operator+=(i.operator++());,甚至在语法上更简单 i.add(i.inc());吗?或者,他们是否也调用未定义行为? 如果没有,为什么不呢?毕竟,对象在连续的序列点之间i被修改了两次。请回想一下经验法则:表达式只能在连续的“序列点”之间修改对象的值一次。如果 i += ++i是表达式,则它必须调用undefined-behavior。如果是,则它的等效项i.operator+=(i.operator++());也 i.add(i.inc());必须调用undefined-behavior,似乎是不正确的!(据我了解) 或者,i += ++i不是一开始的表达方式吗?如果是这样,那么它是什么,expression的定义是什么? 如果它是一个表达式,并且其行为也得到了很好的定义,则意味着与该表达式关联的序列点数在某种程度上取决于该表达式所涉及的操作数的类型。我是否正确(甚至部分正确)? 顺便说一下,这个表情怎么样? //Consider two cases: //1. If a is an array of a built-in type //2. If a is user-defined type which overloads the subscript operator! a[++i] = i; …

4
如何在C ++中序列化对象?
我有一个小的对象层次结构,需要通过套接字连接进行序列化和传输。我都需要序列化对象,然后根据它是什么类型对其进行反序列化。有没有一种简单的方法可以在C ++中做到这一点(就像Java中一样)? 是否有C ++序列化在线代码示例或教程? 编辑:为了清楚起见,我正在寻找将对象转换为字节数组,然后再转换为对象的方法。我可以处理套接字传输。

3
为什么我的include防护不能阻止递归包含和多个符号定义?
关于警卫的两个常见问题: 第一个问题: 为什么不包括保护我的头文件不被相互递归包含的保护措施?每当我编写如下内容时,我都会不断收到关于不存在的符号的错误,这些符号显然在那里,甚至是更奇怪的语法错误: “啊” #ifndef A_H #define A_H #include "b.h" ... #endif // A_H “ bh” #ifndef B_H #define B_H #include "a.h" ... #endif // B_H “ main.cpp” #include "a.h" int main() { ... } 为什么在编译“ main.cpp”时出现错误?我该怎么做才能解决我的问题? 第二个问题: 为什么不包括防止多个定义的防护措施?例如,当我的项目包含两个包含相同标题的文件时,有时链接器会抱怨某个符号多次定义。例如: “ header.h” #ifndef HEADER_H #define HEADER_H int f() { return 0; …

2
C ++中的对象销毁
在C ++中确切地销毁对象是什么意思?因为没有垃圾收集器,我是否必须手动销毁它们?异常如何发挥作用? (注意:这本来是Stack Overflow的C ++ FAQ的条目。如果您想批评以这种形式提供FAQ的想法,那么开始所有这些工作的meta上的发布将是这样做的地方。该问题在C ++聊天室中进行监控,该问题最初是从FAQ想法开始的,所以提出这个想法的人很可能会读懂您的答案。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.