gpt4 book ai didi

c++ - unique_ptr、nullptr 并支持 gcc 4.5.x 和 4.6.x

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:57 25 4
gpt4 key购买 nike

我正在开发一个有两个不同最终用户的库,其中一个使用 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

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

最佳答案

你遇到了什么错误?

#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) 编译良好。

另外,通过 N2431 Stroustrup 和 Sutter 在 nullptr 上发表的论文,其中一个示例中明确列出了类似的用法(与 0 比较)。

关于c++ - unique_ptr、nullptr 并支持 gcc 4.5.x 和 4.6.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10864329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com