gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:24 28 4
gpt4 key购买 nike

我包含了定义函数“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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com