什么是C ++中比较模糊的部分?

时间:2009-05-23 17:57:09

标签: c++

我已经阅读了很多关于C ++的初学者书籍,除此之外还有一些,但是C ++的一些比较模糊的方面是什么,或者我在哪里可以找到关于这些的信息/教程?

11 个答案:

答案 0 :(得分:9)

ADL(又名Koenig Lookup)非常模糊,即使人们在每个Hello World计划中都没有意识到这一点。

ScopeGuard技巧”,其中const引用作为函数的返回值被绑定到它们被赋值的范围,也是相当模糊的。不过,那篇文章引起了人们的关注。

还有一些sizeof()的属性和用法被视为模糊,特别是在宏或模板元程序中使用时。

答案 1 :(得分:5)

候选人特征的格言是“你不经常需要它,但是当你需要它时,你需要它很糟糕。”

  • 安置新
  • extern“C ++”
  • 本地课程
  • 的std ::分配器
  • mutable,explicit,volatile
  • 指针到任意构件-的-任何类

因此,对于有理由使用这些功能的人(图书馆作者),他们不会模糊不清,对于大多数C ++程序员来说,他们将是未知的。

答案 2 :(得分:4)

实际上关心bad_alloc。

没有

编辑:我的意思是,在我有幸修复错误的许多有时很大的C ++项目中,捕获bad_alloc并对其进行操作的概念已经丢失。这将把它放在C ++的“模糊”部分,即使它不应该是。

答案 3 :(得分:2)

Herb Sutter的书是这个主题的绝佳来源 - 从http://www.gotw.ca/publications/xc++.htm开始。

答案 4 :(得分:2)

非常模糊:

  • void operator,();
  • 短路时运算符||()和运算符&&()的优先权 逻辑表达式
  • 超载时会发生什么 操作者及()
  • 有状态初始化的顺序 虚拟不和。
  • 引用指向模板的指针 成员
  • function try blocks
  • allocator :: rebind语法
  • std :: unexpected
  • 的非默认行为
  • 的std :: cout.imbue()
  • 任何具有区域设置的东西,尤其如此 自定义方面
  • 超越通过支配地位
  • 三合字母

仅举几例

答案 5 :(得分:2)

一些模糊的C ++功能:

答案 6 :(得分:1)

Template metaprogramming(由编译器执行的 C ++中完整的编程完整的编程语言)和预处理器的黑客攻击可能非常困难! (你甚至可以用这个来创建全新的语法 - 只需看看boost::lambda

但我认为学习和理解最重要的是STL(C ++标准库),它不可避免地有用但看起来有些奇怪。

答案 7 :(得分:1)

所有书籍都解释了例外情况 但很少有人谈论例外安全和例外受助人。

如何使用RAII(简单示例智能指针)使您的代码异常安全。

您应提供哪些例外保证。

  • 析构函数应该承认没有异常逃脱。
  • 一些STL算法使用像swap这样的东西,它也应该允许没有异常转义在所有情况下正常工作。
  • 等...

答案 8 :(得分:1)

没有人提到我认为它是C ++最奇怪的部分之一,显然是一种思想,预减量和预增量运算符的语法。

class A {
public:
  A &operator++() {...} // Post increment
  A &operator--() {...} // Post decrement
};

VS

class A {
public:
  A &operator++(int) {...} // Pre increment
  A &operator--(int) {...} // Pre decrement
};

当然,后期增量意味着添加一个但返回前一个值,前增量意味着添加一个并返回新值。 E.g:

A a;
f(a++); // Post increment a
f(++a); // Pre increment a

如果您尝试使用或传递'int'参数,我不确定会发生什么。你可以试着像这样传递它:

obj.operator++(0);

我想这是在明确调用它们时区分两个运算符的方式。

答案 9 :(得分:0)

就其他方法而言,某些方法的实施并不那么明显。

分配操作员:
- >实施作为复制结构和交换。

操作员+
- >实现为复制构造和运算符+ =

操作员!=
- >根据operator ==

实现

等...

概念是工作应该在一个方法中进行本地化,其他方法使用这种方法来完成实际工作,然后添加它们的独特扭曲。

答案 10 :(得分:0)

如果您想学习一些关于C ++的模糊内容,请深入尝试模板,并通过Modern C++ Design阅读Andrei Alexandrescu。这本书是关于模板元编程的经典。