小编MSa*_*ers的帖子

#include <comutil.h>导致错误

VS 2010 C++ CLR Library项目,添加comutil.h库时出错

> Error 20  error LNK2001: unresolved
> external symbol "extern "C" long
> __stdcall VariantCopy(struct tagVARIANT *,struct tagVARIANT const
> *)" (?VariantCopy@@$$J18YGJPAUtagVARIANT@@PBU1@@Z)    D:\Projects\AL\Service\ncFlow\ncOPClient.NET\Stdafx.obj ncOPClient.NET
> Error 18  error LNK2001: unresolved
> external symbol "extern "C" void
> __stdcall VariantInit(struct tagVARIANT *)"
> (?VariantInit@@$$J14YGXPAUtagVARIANT@@@Z) D:\Projects\AL\Service\ncFlow\ncOPClient.NET\Stdafx.obj ncOPClient.NET
> Error 13  error LNK2001: unresolved
> external symbol "void __stdcall
> _com_issue_error(long)" (?_com_issue_error@@$$FYGXJ@Z)    D:\Projects\AL\Service\ncFlow\ncOPClient.NET\Stdafx.obj ncOPClient.NET
> Error 10  error LNK2028: unresolved
> token (0A000376) "void __stdcall
> _com_issue_error(long)" (?_com_issue_error@@$$FYGXJ@Z) …
Run Code Online (Sandbox Code Playgroud)

c++ clr

22
推荐指数
2
解决办法
2万
查看次数

strtok() - 为什么你必须传递NULL指针才能获得字符串中的下一个标记?

这是strtok()的解释.

#include <string.h>
char* strtok( char* s1, 
              const char* s2 );*
Run Code Online (Sandbox Code Playgroud)

第一次调用strtok()会返回指向s1指向的字符串中第一个标记的指针.对strtok()的后续调用必须将NULL指针作为第一个参数传递,以便获取字符串中的下一个标记.

但我不知道,为什么你必须传递NULL指针才能获得字符串中的下一个标记.我搜索了大约15分钟,但没有在互联网上找到解释.

c c++ string pointers strtok

22
推荐指数
2
解决办法
2万
查看次数

map.erase(map.end())?

考虑:

#include <map>

int main()
{
    std::map< int, int > m;
    m[ 0 ] = 0;
    m[ 1 ] = 1;

    m.erase( 0 );  // ok
    m.erase( 2 );  // no-op
    m.erase( m.find( 2 ) );  // boom!
}
Run Code Online (Sandbox Code Playgroud)

(好的,所以标题讨论了擦除end()迭代器,但是find会返回end()以查找不存在的键.)

为什么擦除不存在的键OK,但擦除end()会爆炸.我在标准中没有看到任何明确的提及?

我在VS2005上尝试了这个(在调试配置中抛出异常)和GCC 4.0.1(100%CPU).它是依赖于实现的吗?

谢谢.

c++ iterator stl map

21
推荐指数
2
解决办法
1万
查看次数

为什么返回类型的类型限定符毫无意义?

说我有这个例子:

char const * const
foo( ){
   /* which is initialized to const char * const */
   return str;
}
Run Code Online (Sandbox Code Playgroud)

正确的方法是什么来避免编译器警告"返回类型的类型限定符是没有意义的"?

c c++

21
推荐指数
2
解决办法
2万
查看次数

中断屏蔽:为什么?

我在读中断.可以通过特殊的中断屏蔽挂起非关键中断.这称为中断屏蔽.我不知道什么时候/为什么你可能想要或需要暂时暂停中断?可能是信号量,还是在多处理器环境中编程?

operating-system interrupt computer-architecture

21
推荐指数
3
解决办法
2万
查看次数

为什么浏览器允许onmousedown JS改变href?

我已经注意到很长一段时间,当你尝试复制链接位置或在Facebook上打开一个链接时,它会修改链接并传递它l.php.

例如,我可以被发送到

 http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.google.com%2F&h=DKVUritNDJDJLDLVbldoDLFKBLOD5dlfDJY_-d3fgDUaA9b
Run Code Online (Sandbox Code Playgroud)

即使我的浏览器将链接预览呈现为http://www.google.com/.

今天,我使用Firebug进行了仔细研究,发现Facebook投入onmousedown="UntrustedLink.bootstrap($(this)[...]<a>标签.第二个我右键单击链接,我看到hrefFirebug中的属性更改.

这让我担心.

我们很多人给不太精通技术的人提供的建议(在点击之前检查链接带你到哪里,这样你就不会成为网络钓鱼的受害者)现在似乎变得毫无用处.这不是安全隐患吗?网络钓鱼网站不能滥用这个吗?

为什么浏览器不会通过禁止onmousedown更改href或通过在读取href属性之前运行javascript 来阻止此行为,以便我被发送到我认为我要去的位置,而不是在我点击它时的一个更改?

编辑:我想简单地强调,除了网络钓鱼的风险之外,困扰我的是用户被误导,我觉得这种情况可能会发生,无论是否受信任来源.

javascript security href phishing

21
推荐指数
1
解决办法
1788
查看次数

根据operator =实现复制构造函数

如果operator=正确定义,可以使用以下作为复制构造函数吗?

MyClass::MyClass(MyClass const &_copy)
{
    *this = _copy;
}
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor

19
推荐指数
3
解决办法
8354
查看次数

O(log N)的数据结构查找和更新,考虑小L1缓存

我目前正在开发一个嵌入式设备项目,我遇到了性能问题.分析已经找到了我想要消除的O(N)操作.

我基本上有两个数组int A[N]short B[N].条目A是唯一的,并由外部约束排序.最常见的操作是检查是否有特定值a出现A[].不太常见但仍然常见的是对元素的改变A[].新值与先前值无关.

由于最常见的操作是查找,所以B[]它就在哪里.它是一个排序的索引数组A[],例如,A[B[i]] < A[B[j]]当且仅当i<j.这意味着我可以在A使用二进制搜索时找到值.

当然,当我更新A[k],我必须要找到kB,并将其移动到新位置,以维持搜索顺序.因为我知道旧的和新的价值观A[k],这只是新旧立场之间的memmove()一个子集.这是我需要解决的O(N)操作; 由于旧的和新的值基本上是随机的,我平均在N/2 N/3个元素上移动.B[]kA[k]

我考虑std::make_heap使用[](int i, int j) { return A[i] < A[j]; }谓词.在这种情况下,我可以轻松地B[0]指出最小元素A,并且更新B现在是一个廉价的O(log N)重新平衡操作.但是,我通常不需要A的最小值,我需要查找是否存在任何给定值.现在这是一个O(N log N)搜索B.(我的N个元素中的一半在堆深度log N处,四分之一在(log N)-1处等),这与直接在O(N)搜索中没有任何改进A.

考虑到std::set有O(log N)插入和查找,我会说可以在这里获得相同的性能以进行更新和查找.但是我该怎么做?我需要另一张订单B …

c++ algorithm complexity-theory

19
推荐指数
1
解决办法
1005
查看次数

Graphviz点算法

有关Graphviz Library中dot的算法是否有任何文档(完整的伪代码?)?

我只找到了一些部分伪代码文档.

graph directed-graph dot graphviz

19
推荐指数
1
解决办法
6463
查看次数

如何评估'if(A && B)'语句?

if( (A) && (B) )
{
  //do something
}
else
  //do something else
Run Code Online (Sandbox Code Playgroud)

问题是,如果A为FALSE,该语句是否会立即中断.B会被评估吗?

我问这个情况,当数组实际上是空的并且元素为零时,B检查数组索引的有效性就说数组[0].因此我们尝试访问超出数组范围的内容,因此抛出了一个段错误.特别

if( (array.GetElements() > 0) && (array[0]))
  array[0]->doSomething();
else
  //do nothing and return
Run Code Online (Sandbox Code Playgroud)

如果array [0]实际得到了评估,这可能会很危险,因为它会在没有第一次检查的情况下在"&&"的左侧进行段错误.优先级告诉我,左侧肯定会优先,但它并没有告诉我,如果左边是假,它将不会评估右侧.

c++

18
推荐指数
2
解决办法
9万
查看次数