"#define clear()"和"std::wstring::clear()"之间的混淆

Confusion between "#define clear()" and "std::wstring::clear()"

本文关键字:clear 之间 std #define wstring      更新时间:2023-10-16

我包含了"PDCurse/curses.h",它定义了一个函数"clear()",然后当我使用"std::wstring::clear(()"时,msvc-10.0编译器会报告错误。当我在include之后'#undefclear()'时,它被修复了。代码如下:

inline void str_clear( std::wstring& wstr ) 
{
    wstr.clear();
}

我使用了"std::",但为什么编译器仍然令人困惑?它可能是由多重定义的"namespace"引起的吗?

原因是预处理器基本上对所有定义的宏进行搜索和替换。它是在编译器获得代码之前完成的,而且它对命名空间、类或范围一无所知。

因此,如果你有例如

#define clear()  something

然后使用

wstr.clear();

预处理器将替换clear(),以便编译器看到

wstr.something;