【发布时间】:2016-09-05 08:58:05
【问题描述】:
我正在尝试确定是否可以以不能忽略返回值的方式声明 C++ 函数(最好在编译时检测到)。我尝试使用 private(或在 C++11 中,deleted)operator void() 声明一个类,以尝试在未使用返回值时捕获到 void 的隐式转换。
这是一个示例程序:
class Unignorable {
operator void();
};
Unignorable foo()
{
return Unignorable();
}
int main()
{
foo();
return 0;
}
不幸的是,我的编译器 (clang-703.0.31) 说:
test.cpp:2:5: warning: conversion function converting 'Unignorable' to 'void' will never be used
operator void();
^
并且不会在调用foo() 时引发任何错误或警告。所以,那是行不通的。有没有其他方法可以做到这一点?特定于 C++11 或 C++14 或更高版本的答案会很好。
【问题讨论】:
-
您确定存在到
void的隐式转换吗?我在标准中找不到任何关于它的内容。 (但我什至不确定会转换什么。)AFAIK,当返回值没有“接收者”时发生的所有事情都是临时对象的构造和销毁。 -
C++17 将为此使用
[[nodiscard]]attribute。 -
You can mimic that in pre-c++17,wiki 中的引用写入 std::err,但你总是可以抛出异常。
标签: c++ return-value void