mag*_*nus 11 c++ environment-variables c++11
我有一个简单的调用std::setenv,它在我的Linux发行版下工作正常gcc.但是,clang在我的Mac OS X上使用时,出现以下错误.
error: no member named 'setenv' in namespace 'std'; did you mean simply 'setenv'?
std::setenv(name.c_str(), value.c_str(), true);
Run Code Online (Sandbox Code Playgroud)
我敢肯定,我已经阅读了C++ 11 setenv中名称空间的一部分std,但现在我不确定.
问题:应该使用setenv还是std::setenv使用,为什么会这样?
Bau*_*gen 13
我不觉得像什么std::setenv的CPPR,只有std::getenv其中的文档中引用了POSIX的功能setenv,当然这是没有的namespace std.
因此,既然你没有调用C++标准函数,那么plain setenv应该是要走的路,因为这是定义函数的标准定义它的方式.请注意,std::setenv允许(但不是必需)工作.(另见hvd的评论.)
对于标准爱好者:setenv仅被提及为
getenv如果没有任何修改环境的话,对函数的调用不应引入数据竞争(17.6.5.9).[注意:调用POSIX函数setenv并putenv修改环境. - 结束说明]
来自N3797 18.10.5.它确实不是C++标准函数,因此不一定是namespace std.