C++ 隐式地将参数强制转换为bool
前提: 由于宏可能存在问题,我试图创建一个不使用宏实现的定义范围。这是我的初步尝试C++ 隐式地将参数强制转换为bool,c++,casting,C++,Casting,前提: 由于宏可能存在问题,我试图创建一个不使用宏实现的定义范围。这是我的初步尝试 //version for if not defined bool Defined() { return false } //version for if defined bool Defined(bool anything) { return true; } 以及一个示例用例 if(Defined(_DEBUG)) { Stuff... } 哪个会取代 #ifdef _DEBUG
//version for if not defined
bool Defined()
{
return false
}
//version for if defined
bool Defined(bool anything)
{
return true;
}
以及一个示例用例
if(Defined(_DEBUG))
{
Stuff...
}
哪个会取代
#ifdef _DEBUG
Stuff...
#endif
或
好处:语法更清晰,范围更广,
此代码不是有条件的,因此编译器将能够轻松优化代码段。
问题
这个程序有几个问题,第一个是这个帖子的原因 问题:
您不能传入任何不能隐式转换为布尔的内容。有没有办法隐式地将任何对象、数字、指针等强制转换为布尔值?我不相信有,但我想在继续之前确定一下。您可以使用通用模板:
template<class T>
bool Defined(T &&) { return true; }
模板
bool定义的(T&){return true;}
您可以使用通用模板:
template<class T>
bool Defined(T &&) { return true; }
模板
bool定义的(T&){return true;}
将汽车
转换为bool
意味着什么?只有预处理器知道调试
是否定义了。调试
未定义时,令牌调试
扩展为调试
,我不明白您为什么要这样做if
块和#ifdef
块通常有非常不同的用途。没有隐式强制转换。你说的是隐式转换。演员阵容总是明确的。这是你在源代码中编写的东西,用来告诉编译器进行转换。将Car
转换为bool
意味着什么?只有预处理器知道DEBUG
是否定义了
。当DEBUG
未定义时,标记DEBUG
扩展为DEBUG
,我不明白你为什么想要这个if
块和#ifdef
块通常有非常不同的用途。没有隐式强制转换。你说的是隐式转换。演员阵容总是明确的。这是您在源代码中编写的,用于告诉编译器进行转换。t
可以删除,以消除“未使用的参数”警告。虽然这回答了所问的字面问题,但请注意它不会达到最终目标。如果定义了DEBUG
,它很可能被定义为空,这将调用Derived()
。如果它没有定义,defined(DEBUG)
使用一个可能未定义的标识符DEBUG
t
可以删除,以消除“unused parameter”警告。虽然这回答了所问的字面问题,但要注意它不会达到最终目标。如果定义了DEBUG
,它很可能被定义为空,这将调用Derived()
。如果它没有定义,defined(DEBUG)
使用一个可能未定义的标识符DEBUG
。