小编Kir*_*lev的帖子

为什么在c ++中获得第一个chace异常

我做了一个示例来检查在Windows控制台应用程序中按下Ctrl + C时会发生什么:

bool    TerminationFlag=true;

int main()
{
    g_hTerminateEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
    ::SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE);
    while(1)
    {
        if(TerminationFlag == false)
        {
            break;
        }
    }
    return 0;
}

BOOL WINAPI ConsoleCtrlHandler(DWORD dwCtrlType)
{

    if (dwCtrlType == CTRL_C_EVENT ||
        dwCtrlType == CTRL_BREAK_EVENT ||
        dwCtrlType == CTRL_CLOSE_EVENT)
    {
        TerminationFlag=false;
        ::SetEvent(g_hTerminateEvent);
        return TRUE;
    }
    return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

我通过在visual studio中使用启动调试选项运行它来测试代码,当我按下ctrl + c时,我收到以下消息

0x7c87647d处的第一次机会异常

当我按下继续选项时,TerminationFlag=false;即使我在控制处理程序中处理了Ctrl + C,我的代码也会出现.你能告诉我这个问题吗?

c++ exception visual-studio-2010 visual-c++

6
推荐指数
1
解决办法
3551
查看次数

Moq是派生类的基类函数

我是Moq的新手,我刚看了莫青的复数视频,所以我觉得有权去写一些测试.我有一个基类让我们说Sheet实现了一个接口ISheet.Sheet是页面的基类:

abstract class Sheet: ISheet
{
    public virtual void CreateSheet()  // Defined in ISheet
    {
    }
    public virtual void BuildSheet() // Defined in ISheet
    {
    }
    //and some abstract methods, etc.
}

public class Page : Sheet
{
    public override void CreateSheet()
    {
        BuildSheet(); // Base class implementation
    }
}
Run Code Online (Sandbox Code Playgroud)

我覆盖了基类中的一个方法CreateSheet(),但我想测试BuildSheet()基类中的方法是从我的派生类调用的:

所以在我的测试类中,我将SQ替换为接口而不是接口

var MockSheet = new Moq<Page>();
Run Code Online (Sandbox Code Playgroud)

调用方法:

var actual = MockSheet.Object.CreateSheet(); 
Run Code Online (Sandbox Code Playgroud)

然后验证

MockSheet.Verify(x => x.BuildSheet(), Times.AtLeastOnce);
Run Code Online (Sandbox Code Playgroud)

相反,我得到MockException"在模拟上预期调用至少一次,但从未执行过.永远不会调用CreateSheet方法.如果我将CreateSheet方法更改为:

public void CreateDocSheet() // removed override
{
    BuildSheet() …
Run Code Online (Sandbox Code Playgroud)

c# moq

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

AuthorizeAttribute和IAuthenticationFilter之间的区别

在ASP.Net Web API 2(Owin)中,IAuthenticationFilter和之间有什么区别AuthorizeAttribute

目前我通过创建我自己的授权来实现我的授权AuthorizeAttribute:

public class IntegratedAuthorization : AuthorizeAttribute
{
    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        bool returnValue = false;

        if (actionContext.Request.Headers.Authorization != null)
        {
            if (actionContext.Request.Headers.Authorization.Scheme != null)
            {
                if (actionContext.Request.Headers.Authorization.Scheme.ToLower() == "basic")
                {
                    if (actionContext.Request.Headers.Authorization.Parameter != null)
                    {
                        // ....
                        // ....
                        // ....
                    }
                }
            }
        }

        return returnValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

比我把它添加到我HttpConfiguration这样:

config.Filters.Add(new IntegratedAuthorization());
Run Code Online (Sandbox Code Playgroud)

一切正常,但是当我搜索互联网时,我发现很多开发人员都在使用IAuthenticationFilter,就像在本教程中一样:ASP.NET Web API 2中的身份验证过滤器.

现在真正的问题是,这两种方法有什么区别?我该怎么用?

谢谢!

c# asp.net authentication authorization asp.net-web-api

6
推荐指数
1
解决办法
5293
查看次数

Azure SQL 成本与 DocumentDB/CosmosDB 成本的比较

有没有人比较过 Azure SQL 成本与 DocumentDB/CosmosDB 成本?我不清楚 Azure CosmosDB 成本中显示的 RU。例如,1 TB db 中的 1 个请求不能等于 1 GB db 中的 1 个请求。

azure-sql-database azure-cosmosdb

6
推荐指数
1
解决办法
8615
查看次数

我该怎么学C?

我对学习C感兴趣.我读过K&R,甚至在R和Python中做过一些简单的C扩展工作.使用C做更实质的事情有什么值得的项目想法?任何好的在线资源,类似于Dive Into Python?特别是,资源专注于已经知道正在尝试学习C的新语言的程序员(提到诸如"在C中询问数组的长度是无意义的,你懒惰的Pythonista").

我的背景:

数学/统计学,Python,R中的日常编程,主要围绕自然语言处理,算法等.

c kernighan-and-ritchie

5
推荐指数
2
解决办法
1979
查看次数

类成员的使用声明应为成员声明 (C++2003)

第 7.3.3 段。C++2003 标准指出

类成员的使用声明应为成员声明。

这意味着以下给出了语法错误:

struct S1
{
    static int var1;
};

using S1::var1;
Run Code Online (Sandbox Code Playgroud)

虽然以下编译良好:

namespace N2
{
    int var2;
}

using N2::var2;
Run Code Online (Sandbox Code Playgroud)

有人知道其背后的理由(如果有的话)吗?

更重要的是,该标准给出了结构体静态数据成员的明确示例,并告诉它应该导致语法错误。MS C++ 给出此错误:

cpptest1.cxx(9) :错误 C2885:'S1::var1':不是非类范围内的有效使用声明

目前尚不清楚为什么要禁止这种做法。

c++

5
推荐指数
1
解决办法
1852
查看次数

我应该为 .PNG 文件中的透明像素设置什么 RGB 值?

.PNG 文件中像素的透明度由 alpha 通道的值决定:

  • 0 - 透明
  • 255 - 不透明

似乎一旦将像素设置为完全透明,像素的 RGB 分量应该就不重要了。真的是这样吗?关于在完全透明的像素中应该设置什么 RGB 值,是否有任何约定或有任何指导方针?

在 VS2012 中,当我尝试使用透明颜色进行绘制时,没有任何反应。似乎 VS 将工具的当前颜色应用于像素的当前状态。一旦绘图工具的当前颜色是透明的,这意味着没有变化。我应该怎么做才能使非透明像素完全透明?

png visual-studio-2012

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

C中6.5.2.3结构和联合成员的严格别名规则的例外情况

引自C99标准:

6.5.2.3

5为了简化联合的使用,我们做了一个特殊的保证:如果一个联合包含几个共享一个共同初始序列的结构(见下文),并且如果联合对象当前包含这些结构中的一个,则允许检查它们中任何一个的共同初始部分,可以看到完整类型的联合声明.如果对应的成员具有一个或多个初始成员的序列的兼容类型(并且对于位字段,具有相同的宽度),则两个结构共享共同的初始序列.

这种情况有一个例子:

// The following code is not a valid fragment because
// the union type is not visible within the function f.

struct t1 { int m; };
struct t2 { int m; };

int f(struct t1 *p1, struct t2 *p2)
{
    if (p1->m < 0)
        p2->m = -p2->m;
    return p1->m;
}

int g()
{
    union
    {
        struct t1 s1;
        struct t2 s2;
    } u;

    /* ... */
    return f(&u.s1, &u.s2);
}
Run Code Online (Sandbox Code Playgroud)

我添加了一些更改:

#include <stdio.h> …
Run Code Online (Sandbox Code Playgroud)

c struct pointer-aliasing unions

5
推荐指数
1
解决办法
1091
查看次数

理解可变参数模板函数中的点

假设我有以下代码.我在很大程度上理解这一点.

template <class ...Args>               //---> Statement A
void foo_imp(const Args&... args)      //---> Statement B
{
    std::vector<int> vec = {args...};  //---> Statement C
}
Run Code Online (Sandbox Code Playgroud)

现在我对...应该在变量名称之前或之后出现的位置感到困惑.这就是为什么我感到困惑.

声明A,如下所示

template <class ...Args>  
Run Code Online (Sandbox Code Playgroud)

表明这...是变量类型,Args是变量名称(很好)

声明B,如下

void foo_imp(const Args&... args) 
Run Code Online (Sandbox Code Playgroud)

在我看来这种类型是Args,它是模板类型,但是...后面的添加Args让我困惑?

然后将值赋给向量进一步令人困惑

 std::vector<int> vec = { args... };
Run Code Online (Sandbox Code Playgroud)

...args之后为什么会这样?

关于我如何记住上述代码的任何想法,以便它对我有意义?

c++ templates variadic-templates c++11

5
推荐指数
1
解决办法
1003
查看次数

C++运算符重载和关联的命名空间

以下简化示例编译gcc并且Visual Studio,但是失败了clang!?

namespace N
{
    struct A {};

    template <typename T>
    double operator+ (T a, double d) {return d;}

    template <typename T>
    double operator+ (double d, T a) {return d;}
}

void test()
{
    N::A a;
    double x;

    double y = a + x;
    double z = x + a;
}
Run Code Online (Sandbox Code Playgroud)

在我看来,ADL可以找到模板operator+名称空间N.

为什么不clang同意?它是clang其他编译器中的错误吗?

这是来自clang 3.5.1的编译错误(在coliru上测试过),我不明白这里有什么问题......

10 : error: overloaded 'operator+' must have at least one parameter …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces operator-overloading clang argument-dependent-lookup

5
推荐指数
1
解决办法
525
查看次数