采用nulltpr_t的构造函数:函数定义不声明参数
Constructor that takes nulltpr_t: function definition does not declare parameters
我有以下代码:
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.
相关文章:
- 在命名空间中定义函数还是限定函数
- 为什么在定义函数之前先声明它
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 这个c++代码是如何在没有定义函数的情况下运行的
- 具有外部"c"和程序集的未定义函数
- 已定义函数时出现 G++ "未定义的引用"错误
- 将自定义函数传递到基抽象类中以延迟执行
- C++使用 rand 定义函数语法
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- 使用定义函数模板别名
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 在内联程序集中定义函数和从 C++ 调用时出现问题
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 朋友定义函数的名称空间是什么
- 介子 对用户定义函数的未定义引用
- 如何使用 "using" 关键字定义函数原型/签名
- 在 C 结构中定义C++函数