5

我正在开发一个有两个不同最终用户的库,其中一个正在使用 gcc 4.5.3,另一个刚刚移到 gcc 4.6.3。该库使用新的 C++11 智能指针(特别是 unique_ptr)并在 gcc 4.5.3 上编译良好。但是,在这两个版本之间,gcc 开始支持 nullptr,因此 unique_ptr 的 API 发生了变化,以更接近标准。现在这样做,以下代码从精细变为模棱两可

unique_ptr up( new int( 30 ) );
...
if( up == 0 ) // ambiguous call now to unique_ptr(int) for 0

是否有一种干净的(即下一句)方法来更改上面的 if 语句,以便它在有和没有 nullptr 的情况下都有效?如果可能的话,我想避免配置检查,然后像下面这样的宏(我认为它会起作用)

#if defined NULLPOINTER_AVAILABLE
  #define NULLPTR (nullptr)
#else
  #define NULLPTR (0)
#endif

还是这是获得我正在寻找的行为的唯一方法?

4

1 回答 1

3

你遇到了什么错误?

#include <iostream>
#include <memory>
int main() {
 using namespace std;
 unique_ptr<int> up( new int( 30 ) );
 if (up == 0)
     cout << "nullptr!\n";
 else cout << "bam!\n";
}

g++ -std=c++0x -Wall nullptr.cpp -o nullptr(gcc 4.6.2)一起编译得很好。

此外,请阅读 Stroustrup 和 Sutter 的N2431论文,其中在其中一个示例中明确列出nullptr了类似的用法(与 比较)。0

于 2012-06-02T17:17:24.437 回答