【发布时间】:2019-08-29 08:37:59
【问题描述】:
我编写了以下函数,它将打印出环境变量的值,但是当我编译它时,它显示以下错误:
error C2760 : syntax error : unexpected token 'new', expected ';'
warning C4244: 'initializing': conversion from 'DWORD' to 'TCHAR', possible loss of data
我写的代码:
template<typename T>
void EnvironmentVariableParser(T arg_variable_name)
{
PTSTR pszTemp, pszValue = NULL;
auto dwResult = GetEnvironmentVariable(arg_variable_name, pszValue, 0);
if (dwResult != 0)
{
auto size = dwResult * sizeof(TCHAR);
pszTemp = new PTSTR(size);
pszValue = reinterpret_cast<PTSTR>(pszTemp);
GetEnvironmentVariable(arg_variable_name, pszValue, size);
std::cout << arg_variable_name << "=" << pszValue << std::endl;
delete pszValue;
}
else
{
std::cout << arg_variable_name << "=<unknown value>" << std::endl;
}
}
是否可以将新的运算符输出转换为 PTSTR 之类的东西?
【问题讨论】:
-
正确的语法是
pszValue = new TCHAR[size];,同样free(pszValue);也是无效的,因为它不匹配分配。 -
您不能将
malloc(x)替换为new x。有好书清单here. -
OT:operator new 可能是指new-expression。只是不要与
operator new混淆。 -
我个人建议不要使用匈牙利符号。它带来的问题多于解决的问题......
-
@Adrian 没错。我从未见过他们实际上优于
TCHAR*等等的例子。它们对应的基本类型(TCHAR本身)是另一个主题。匈牙利符号(前缀如psz、i、...),而不是匈牙利名称。不过,关于后者:与任何其他非英文名称相同:您将陷入不得不与其他人共享您的代码的情况下,有一天不说该语言(如果只是在 SO ),任何非英语标识符都会使理解这些代码背后的意图变得更加困难......
标签: c++ windows visual-studio