采用nulltpr_t的构造函数:函数定义不声明参数

Constructor that takes nulltpr_t: function definition does not declare parameters

本文关键字:定义 函数 声明 参数 构造函数 nulltpr 采用      更新时间:2023-10-16

我有以下代码:

class C {
private:
void *data;
public:
constexpr C(nullptr_t) : data(nullptr) { }
C(int i) : data(new int(i)) { }
};

我创建了一个需要nullptr_t的构造函数,以便我可以拥有类似于以下内容的代码:

C foo(2);
// ...
foo = nullptr;

类似的代码以前在 MSVC 上工作过,但是此代码无法在 GCC 5.3.1(使用-std=c++14)上编译,并在C(nullptr_t)的右括号中带有error: function definition does not declare parameters。即使我给参数一个名字(在本例中为_),我也得到error: expected ')' before '_'.如果删除constexpr关键字,此操作也会失败。

为什么我无法声明这样的构造函数,有什么可能的解决方法?

你一定是"使用命名空间std"的粉丝,你只是被它绊倒了:

constexpr C(std::nullptr_t) : data(nullptr) { }

GCC 5.3.1 在一致性级别编译--std=c++14

[mrsam@octopus tmp]$ cat t.C
#include <iostream>
class C {
private:
void *data;
public:
constexpr C(std::nullptr_t) : data(nullptr) { }
C(int i) : data(new int(i)) { }
};
[mrsam@octopus tmp]$ g++ -g -c --std=c++14 -o t.o t.C
[mrsam@octopus tmp]$ g++ --version
g++ (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.