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

标签 c++

我包含了定义函数“clear()”的“PDCurses/curses.h”,然后当我使用“std::wstring::clear()”时,msvc-10.0 编译器报告错误。当我在包含后使用“#undef clear()”时它已修复。代码是这样的:

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

我使用了“std::”,但为什么编译器仍然令人困惑? 可能是多定义的'namespace'引起的?

最佳答案

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

所以如果你有例如

#define clear()  something

然后使用

wstr.clear();

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

wstr.something;

关于c++ - "#define clear()"和 "std::wstring::clear()"之间的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18141622/

相关文章:

具有函数的结构的c++大小

c++ - 不使用 std::function 将捕获的 lambda 转换为函数指针

c++ - 套接字接受无效参数 (c++)

C++ 类 - 在将参数传递给成员对象之前验证参数

c++ - 轻量级 http 服务器 C++

c++ - 中缀到后缀转换c++

c++ - CUDA错误: expected constructor,析构函数,或者 'void'之前的类型转换

c++ - Sol2 无法迭代 vector

c++ - Qt中如何列出继承自QObject的类的所有成员变量?

c++ - 比较 STL 容器和数组?