......如果没有,为什么不呢?
所以这是问题背后的问题.
据我所知,MD5和SHA1中意外碰撞的可能性很小(虽然SHA1中的可能性比MD5中的可能性小).我也明白故意碰撞在理论上是可行的.它几乎可能吗?在这些算法中,我是否可以通过某个过程故意生成具有相同散列的两条消息?我会经历什么过程?
我有一个Excel工作簿,工作表看起来像这样:
Apple | 15 | Bob
Banana | 20 | Tim
Apple | 19 | Mary
Banana | 25 | Kate
Run Code Online (Sandbox Code Playgroud)
我想创建另一个工作表,仅显示第一个工作表中第一列中包含"Apple"的行:
Apple | 15 | Bob
Apple | 19 | Mary
Run Code Online (Sandbox Code Playgroud)
从某种意义上说,这类似于SQL SELECT查询,我们在第一个表(表)中选择具有给定值的所有条目.
问题是,我不想不断维持第二张纸.如果我更改第一张纸 - 例如,将第一行中的"Apple"更改为"Grape" - 我希望第二张纸自动更新,以便它只显示"Apple"行 - 在该示例中,仅显示"Mary"现在将显示行.
这似乎是一个非常有用的功能.是否可以在不使用Visual Basic脚本的情况下执行此操作?
Xcode 4中的"Capture OpenGL ES Frame"功能非常出色.它列出了在单个渲染帧中进行的每个与OpenGL相关的调用.但是还有一个额外的功能可以帮助我将这些调用连接到我的代码并更轻松地搜索重要数据.我只是不知道这个功能是否已经可用.
是否有可能添加我自己的"注释" - 或称为"标记","伪调用","标签",无论你想要什么 - 到捕获的呼叫列表.例如,我是否可以添加一个条目,说"这是我开始渲染HUD的地方",并将它显示在实际渲染HUD的调用的正上方?
DirectX的PIX工具具有类似的功能,这就是我所希望的.
我在使用Xcode时遇到的一件事是,我在Visual Studio中度过了大部分职业生涯,并且在过去的几年中,大部分时间都喜欢Xcode,它能够同时编辑多行文本.
在VS中,这是通过alt拖动柱状选择然后键入来完成的.您键入的内容一次显示在所有行上.所以你可以转换这个:
glVertex2f( 1, -1 );
glVertex2f( 1, 0 );
glVertex2f( 1, 1 );
Run Code Online (Sandbox Code Playgroud)
......对......
glVertex2f( -1, -1 );
glVertex2f( -1, 0 );
glVertex2f( -1, 1 );
Run Code Online (Sandbox Code Playgroud)
......只需一次按键.或许你打算键入"glVertex2i".所有那些f都可以在一瞬间转向我.此功能在各种情况下都非常方便.
Xcode还允许使用alt + drag进行列式选择.但是,在进行此类选择后,键入仅修改第一行文本,就好像只选择了第一行一样.
有没有一个选项,一个插件 - 什么 - 可以在Xcode中进行多行编辑?
我目前的版本是4.3.1,BTW.
我正在使用Xcode 4.3.1的C++ 11语言方言以及libc ++作为标准库.这种组合中的语言支持是惊人的,但调试是折磨.Xcode的"摘要格式"和lldb的摘要格式功能都不会显示任何标准类型(std :: string,std :: vector等)和漂亮的打印.为这些类型编写漂亮的打印机由于其复杂性而非常重要.(例如,std :: string在libc ++中非常复杂.)
在这种情况下,其他开发人员如何为STL类型获得适当的变量显示?或者没有其他人使用libc ++与Xcode/lldb?
我正在使用OpenGL帧缓冲对象(FBO)在iOS上实现模板阴影.代码工作 - 也就是说,模板缓冲区在视觉上正在完成工作,性能似乎很好.
但是,当我通过OpenGL ES Analyzer仪器运行应用程序时,它会抱怨"不存在帧缓冲附件"和"缺少帧缓冲附件".我无法理解这些消息,因为FBO确实有颜色,深度和模板的附件.对glCheckFramebufferStatus()的调用返回GL_FRAMEBUFFER_COMPLETE,表示没有问题.
这是Instrument的OpenGL Analyzer中的错误吗?
如果所有类/结构数据成员都缺少初始化程序,则可以使用统一初始化语法来构造对象.
struct foo
{
int i;
float f;
};
...
foo bar{ 5, 3.141f };
Run Code Online (Sandbox Code Playgroud)
但是如果一个或多个成员具有初始化器,则统一初始化语法将变为无效.
struct foo
{
int i;
float f = 0;
};
...
foo bar{ 5, 3.141f }; // Compiler error.
Run Code Online (Sandbox Code Playgroud)
我猜测添加数据成员初始值设定项会自动实现一个或多个默认构造函数,并禁止构造函数的默认实现initialization_list
.这是预期的标准吗?为什么这样工作?
C和C++程序员在过去十年左右的时间里经常受到打击,因为他们经常无法执行正确的边界检查,特别是在字符串上.这些故障经常导致主要软件产品出现严重的安全问题.由于缓冲区溢出的不安全感变得很好理解,驱动提起正确的边界检查也像推很多程序员从传统buffer-和字符串处理函数strcpy()
和sprintf()
至少部分是因为这些功能的倾向,通过使邀请缓冲区溢出问题关于目标缓冲区大小的假设.一个STL类型等优点std::string
,并std::vector
为他们的缓存访问强有力的控制.
但有一件事困扰着我.<algorithms>
C++标头中许多最广泛使用的函数似乎都积极地乞求溢出滥用:特别是那些采用begin
迭代器(尤其是InputIterator)而没有匹配end
迭代器的函数.例如:
template <class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);
template <class InputIterator, class OutputIterator, class UnaryOperation>
OutputIterator transform (InputIterator first1, InputIterator last1,
OutputIterator result, UnaryOperation op);
template <class ForwardIterator1, class ForwardIterator2>
bool is_permutation (ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2);
Run Code Online (Sandbox Code Playgroud)
最后一个例子 - is_permutation()
特别有启发性.copy()
并且transform()
很容易理解,因此C++程序员应该知道在调用这些函数之前手动检查输出容器的边界,或者使用类似的东西back_inserter
来确保输出容器根据需要增长.因此,可以说,虽然copy()
并且transform()
可以被滥用,但任何事情都可以,并且程序员很容易接受有关这些功能的最佳实践的教育.
is_permutation()
是一个棘手的案例.只要看一下上面的函数声明,你会假设第二个范围的大小(开头的那个first2 …
在启用所有日志记录(例如test --log_level=all
)的情况下执行时,使用Boost Unit Test Framework创建的单元测试将报告单个测试用例使用如下消息所花费的时间:
Leaving test case "testRecursiveSchedule"; testing time: 2196mks
Run Code Online (Sandbox Code Playgroud)
在那里展示的单位,mks,使我神秘.据我所知,Meters-Kilograms-Seconds是一个公制测量系统,但Boost显然只显示时间测量.不应该在这种情况下,单位是毫秒,如果毫秒或微秒(或者我们)如果微秒?是MKS通常理解为微秒的缩写?
请注意,根据Boost单元测试框架源代码,如果经过的时间恰好可被1000整除,则显示的单位将为ms,在这种情况下,在显示之前将除以1000.这与mks意味着微秒的观点是一致的.
但是呢?或者Boost在这里是特殊的?
time boost unit-testing units-of-measurement boost-unit-test-framework
我以为我理解C/C++如何处理结构成员对齐.但是我在Visual Studio 2008和2010中的特定安排中得到了奇怪的结果.
具体来说,我发现由char,short和char组成的结构被编译成6字节结构,即使启用了4或8字节打包.我不知道为什么会这样.我可以理解一个4字节的结构.我或许可以理解一个8字节的结构.但我认为当启用4字节打包时,6字节结构是不可能的.
一个演示问题的程序是:
#include <iostream>
using namespace std;
#pragma pack (4)
struct Alignment
{
char c1;
short s;
char c2;
};
#define REPORT_VAR_POSITION( structName, varName ) cout << "Member '" << #varName << "' sits at byte # " << offsetof( structName, varName ) << "." << endl;
int main(int argc, char* argv[])
{
cout << "Sizeof struct Alignment is " << sizeof( Alignment ) << " bytes." << endl;
REPORT_VAR_POSITION( Alignment, c1 );
REPORT_VAR_POSITION( Alignment, s ); …
Run Code Online (Sandbox Code Playgroud)