返回首页

有人可以给我解释一下什么断言是怎么回事?

Example

 // First example demonstrating

// CString::Find ( TCHAR ch )

CString s( "abcdef" );

ASSERT( s.Find( 'c' ) == 2 );

ASSERT( s.Find( "de" ) == 3 );
感谢
-DRB

回答

评论会员:游客 时间:2012/02/07
马克西米:断言将测试参数及报告的说法,如果是假的在特殊的例子(CString的MSDN例如::),断言将被触发,如果结果的CString::查找是不是预期。在一审中,其结果是,必须是2(c是在字符串中的位置(从零开始);如果结果是别的东西,然后断言将被触发,并警告将被张贴到用户{。BR}应当指出的断言只会在调试模式下执行,这意味着将不被执行的代码中的参数,大部分的时间是不是一个大问题,因为我们测试表达式的结果,而不是表达本身:codeprelang="c++"CStrings(spanclass="code-string""/spanspanclass="code-string"abcdef"/span);spanclass="code-keyword"bool/spanresult=s.Find(spanclass="code-string"'/spanspanclass="code-string"c'/span)==spanclass="code-digit"2/span;ASSERT(result);/pre/code
SAKryukov:DrBones69 |写道:: | Rejeesh.TS:下面的MSDN链接解释:
]
评论会员:。SAKryukov 时间:2012/02/07
这是很常见的文件,其中包括一个函数的用法的例子,使用在用字的例子在leiu断言

例如,您的文章:

Example

 // First example demonstrating

// CString::Find ( TCHAR ch )

CString s( "abcdef" );

ASSERT( s.Find( 'c' ) == 2 );

ASSERT( s.Find( "de" ) == 3 );

真的是说:

{体C3}
微软的确这一切的时候。它只是与已知输入特定用途的具体结果显示
评论会员:游客 时间:2012/02/07
查克・奥图尔:OK,让我们花一点时间来探讨什么是真正的问题在这里首先,正如其他人指出,这是很好的做法,设置一个指针变量,案值设置为NULL时,一些分配内存"了免费的",用free()或删除适当。变量在其他语言(如C#)将被更恰当地称为"调查员",但它是在C/C"指针"变量。然而,正如其他人指出,你真的创造了一个"指针"的第二个副本,当您添加价值的载体,所以,现在你有两个变量,指向相同的内存位置。有没有在这个星球上的魔力,奔波,并期待在所有的变量,并将它们设置为NULL,如果他们指出,一些被"释放"的内存块。你必须自己做。现在你,其实,遵循这一好的做法,当您使用[我]元素的名单上删除,并立即设置为NULL指针。所以,你是在正确的轨道上。这带来了"所有权"的问题。通常情况下,有多个相同分配的内存块的指针是一个坏主意。哦,我可以看到的时候,这是非常有用的,但它在这种用法混淆。一旦你增加价值载体的价值,"放弃所有权",分配的内存的载体。你认识到一个事实,即因为你正在做实际的"释放",通过列表,它通过引用该内存什么是另一种很好的做法,也为NULL指针,当你产生另一个变量/地方"所有权"。在这种情况下,如果你真的不想一个挥之不去的指针值在离开内存,你应该将它设置为NULL后,将它添加到载体。换句话说,一旦你把它添加到向量,价值不再"拥有"会发生什么情况,内存,并在这一点上,以避免未来的问题,你应该设置的内容为NULL。{C4的}这种"所有权"证明很好地使用一个指针,在一个循环内拨出10种不同的内存块,你在你的代码的早期部分。显然,每次通过覆盖循环(有些人会说:"撞")与未来分配,但幸运的是你,你创建的指针的另一个副本,由放置在载体