我已经阅读了很多关于C ++的初学者书籍,除此之外还有一些,但是C ++的一些比较模糊的方面是什么,或者我在哪里可以找到关于这些的信息/教程?
答案 0 :(得分:9)
ADL(又名Koenig Lookup)非常模糊,即使人们在每个Hello World计划中都没有意识到这一点。
“ScopeGuard技巧”,其中const引用作为函数的返回值被绑定到它们被赋值的范围,也是相当模糊的。不过,那篇文章引起了人们的关注。
还有一些sizeof()的属性和用法被视为模糊,特别是在宏或模板元程序中使用时。
答案 1 :(得分:5)
候选人特征的格言是“你不经常需要它,但是当你需要它时,你需要它很糟糕。”
因此,对于有理由使用这些功能的人(图书馆作者),他们不会模糊不清,对于大多数C ++程序员来说,他们将是未知的。
答案 2 :(得分:4)
实际上关心bad_alloc。
没有
编辑:我的意思是,在我有幸修复错误的许多有时很大的C ++项目中,捕获bad_alloc并对其进行操作的概念已经丢失。这将把它放在C ++的“模糊”部分,即使它不应该是。
答案 3 :(得分:2)
Herb Sutter的书是这个主题的绝佳来源 - 从http://www.gotw.ca/publications/xc++.htm开始。
答案 4 :(得分:2)
非常模糊:
仅举几例
答案 5 :(得分:2)
一些模糊的C ++功能:
答案 6 :(得分:1)
Template metaprogramming(由编译器执行的 C ++中完整的编程完整的编程语言)和预处理器的黑客攻击可能非常困难! (你甚至可以用这个来创建全新的语法 - 只需看看boost::lambda
)
但我认为学习和理解最重要的是STL(C ++标准库),它不可避免地有用但看起来有些奇怪。
答案 7 :(得分:1)
所有书籍都解释了例外情况 但很少有人谈论例外安全和例外受助人。
如何使用RAII(简单示例智能指针)使您的代码异常安全。
您应提供哪些例外保证。
答案 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。这本书是关于模板元编程的经典。