【发布时间】:2011-11-14 23:10:41
【问题描述】:
通过反复试验引起了我的注意,有些 C++11 功能依赖于某种编译器魔法 (TM)。我一直在搞乱实现我自己的标准符合标准的stdlib。我知道有现成的 stdlib 实现,但这个更像是我自己的小型应用程序的个人版本。
昨晚我根据规范实现了std::initializer_list,但我无法让它工作,我搜索了高和低的答案,结果发现这是不可能的,并且需要修改编译器本身。好吧,我决定看看它当前的libstdc++ 实现,果然我的实现在设计上完全相同,只是边缘略有不同,我浪费了无意义的时间来弄清楚为什么实现不起作用,什么时候它的设计与libstdc++ 中的设计完全相同。直到六个小时后,我才意识到它必须在命名空间 std 中。结果证明,merley 是编译器的代理,它使initializer_list 成为可能,编译器本身在namespace std 中搜索initializer_list 类。
我的问题是我应该知道是否还有其他库功能需要某种特殊的编译器魔法才能工作,是否需要更多隐藏的代理连接,或者为任何新的 C++11 库功能隐藏编译器本质? 我想提前知道这些,这样我就可以为实现其他依赖于编译器魔法的功能做好准备,而不是浪费一整天的时间通过反复试验来弄清楚;这会变得乏味而且相当烦人。
谢谢。
【问题讨论】:
标签: c++ compiler-construction c++11 initializer-list c++-standard-library