这段代码是否正确?
void foo ( int* p )
{
if ( int* p2 = p ) // single "="
{
*p2++;
}
}
Run Code Online (Sandbox Code Playgroud)
我一直以为它不是,但最近我在同事的矿源中看到过这样的代码.
如果"p"为NULL怎么办?MS VS 2008工作正常,但显示"警告C4706:条件表达式中的赋值".
谢谢.
这是代码:
std::ofstream f("file1.txt");
f<<"123"<<std::endl<<"456"; //(*1)
/*std::stringstream ordinary_strstream; This works too
ordinary_strstream<<"123"<<'\n'<<"456";
f<<ordinary_strstream.str();*/
std::wstringstream s;
s<<L"123"<<std::endl<<L"456"; //(*2)
s<<L"123"<<L"\n"<<L"456"; //(*3)
s<<"123"<<WCHAR(13)<<WCHAR(10)<<"456";//(*4)
HANDLE h =CreateFileW(L"file2.txt", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
ULONG l;
WriteFile(h, s.str().c_str(), s.str().length() * 2, &l, NULL);
Run Code Online (Sandbox Code Playgroud)
在(*1)的情况下有一个换行符,在(*2)和(*3)中我看不到file2.txt中的换行符.在(*3)中有换行符.我用它notepad.exe来浏览.十六进制编辑器0x0D仅显示无字节0x0A.
我应该如何正确地将换行符放在unicode文本文件中?谢谢.
有一系列互斥体.我的功能:
2A.如果没有,那么锁定它
2B.如果已锁定,请等待解锁并锁定它
另一个功能解锁它.
问题是我在等待部分遇到了崩溃:
HANDLE mutexes[N];
void func(int i)
{
// (*) wait until unlocked or create if unlocked
while ((mutexes[i] = CreateMutex(NULL, TRUE/*same with FALSE*/, NULL)) != NULL);
/*or WaitForSingleObject(mutexes[i], INFINITE)*/
mutexes[i] = CreateMutex(NULL, TRUE, NULL);
}
Run Code Online (Sandbox Code Playgroud)
在(*)点,我遇到了崩溃 - 访问冲突.当它试图创建之前已经创建的互斥锁[i]时发生崩溃.我不能使用WaitForSingleObject,因为第一次没有创建互斥锁[i],文档说WaitForSingleObject未定义.此外,如果我使用此功能,我会得到同样的崩溃.
我只需要这种简单伪代码的模拟
if (mutex_has_been_created[mutexes[i]])
WaitUntilRelease()
CreateMutex();
Run Code Online (Sandbox Code Playgroud)
我试图将它包装在一个关键部分并获得相同的结果.我确信这i是在正确的范围内.我不能使用Boost/pThreads/etc.
我知道我的问题很简单,但我找不到解决方案.在所有示例中,我都看到过之前创建了一个互斥锁WaitForSingleObject,这对我来说不起作用.
谢谢.
我下载了Crypto++5.62并使用默认项目设置构建它.在我的项目中,我设置了路径,cryptopp.lib并在"附加依赖项"中定义了它的名称.Crypto ++和我的项目 - VS 2008.
在构建我的项目期间,我得到:
main.obj : error LNK2001: unresolved external symbol
"class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const CryptoPP::DEFAULT_CHANNEL" (?DEFAULT_CHANNEL@CryptoPP@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@B)
main.obj : error LNK2001: unresolved external symbol
"bool (__cdecl* CryptoPP::g_pAssignIntToInteger)(class type_info const &,void *,void const *)" (?g_pAssignIntToInteger@CryptoPP@@3P6A_NABVtype_info@@PAXPBX@ZA)
Run Code Online (Sandbox Code Playgroud)
dumpbin /all cryptopp.lib 在公共符号部分显示我
19471C _imp_?DEFAULT_CHANNEL@CryptoPP@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@B
1D6F30 __imp_?g_pAssignIntToInteger@CryptoPP@@3P6A_NABVtype_info@@PAXPBX@ZA
Run Code Online (Sandbox Code Playgroud)
那怎么了?为什么链接器找不到符号?
UPD:
我的项目设置中的链接器命令行
/OUT:"C:\Projects\crypto_hash\Debug\crypto_hash.exe" /NOLOGO /LIBPATH:"e:\libs\cryptopp\cryptopp562\cryptopp\Win32\DLL_Output\Debug" /MANIFEST /MANIFESTFILE:"Debug\crypto_hash.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Projects\crypto_hash\Debug\crypto_hash.pdb" /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT cryptopp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
这里是C++/Python的人.
我需要比较两个php-arrays containsig用户定义的类.
class Point
{
var $x;
var $y;
function _construct($x_, $y_)
{
$this -> x = $x_;
$this -> y = $y_;
}
}
$mas1 = array(new Point(0,1),new Point(0,1),new Point(0,1));
$mas2 = array(new Point(0,1),new Point(0,1),new Point(0,1));
if (array_diff($mas1,$mas2) == array())
{
echo "they're equal\n";
}
Run Code Online (Sandbox Code Playgroud)
我得到了"可捕获的致命错误:类Point的对象无法转换为字符串".当我试图使用简单
if ($mas1 == $mas2)
Run Code Online (Sandbox Code Playgroud)
我弄错了.
问题:1)有没有办法为我的类重载比较运算符点2)如何正确比较包含用户定义类的两个数组?
谢谢.
我用php 5.2.11