草庐IT

Static-Stack-Usage-Analysis

全部标签

c++ - 通过 static_assert 强制执行模板类型

我试图了解static_assert的用处,我想知道它是否可以帮助我执行设计,如果可以,如何。我有一个通用模板类,它将自己的实现隐藏在另一个模板类中,该模板类根据模板类型的大小部分专门化。以下是此设计的简要概述:templatestructHelper;templatestructHelper{staticTbar();};//...otherspecializations...templateclassFoo{public:Tbar(){returnHelper::bar();}};Foo仅在大小为T时才被支持由Helper的特化支持。例如,Foo和Foo都支持。然而,假设用户试图构

c++ - 通过 static_assert 强制执行模板类型

我试图了解static_assert的用处,我想知道它是否可以帮助我执行设计,如果可以,如何。我有一个通用模板类,它将自己的实现隐藏在另一个模板类中,该模板类根据模板类型的大小部分专门化。以下是此设计的简要概述:templatestructHelper;templatestructHelper{staticTbar();};//...otherspecializations...templateclassFoo{public:Tbar(){returnHelper::bar();}};Foo仅在大小为T时才被支持由Helper的特化支持。例如,Foo和Foo都支持。然而,假设用户试图构

c++ - 解决错误: Stack around the variable 'x' was corrupted的一般方法

我有一个程序在调试时提示我VS2010中的错误:Error:Stackaroundthevariable'x'wascorrupted这为我提供了可能发生堆栈溢出的函数,但我无法直观地看到问题出在哪里。有没有用VS2010调试这个错误的通用方法?是否有可能确定哪个写操作覆盖了不正确的堆栈内存?谢谢 最佳答案 IsthereageneralwaytodebugthiserrorwithVS2010?不,没有。您所做的是以某种方式调用未定义的行为。这些行为未定义的原因是一般情况很难检测/诊断。有时证明是不可能的。但是,通常会导致您的问题

c++ - 解决错误: Stack around the variable 'x' was corrupted的一般方法

我有一个程序在调试时提示我VS2010中的错误:Error:Stackaroundthevariable'x'wascorrupted这为我提供了可能发生堆栈溢出的函数,但我无法直观地看到问题出在哪里。有没有用VS2010调试这个错误的通用方法?是否有可能确定哪个写操作覆盖了不正确的堆栈内存?谢谢 最佳答案 IsthereageneralwaytodebugthiserrorwithVS2010?不,没有。您所做的是以某种方式调用未定义的行为。这些行为未定义的原因是一般情况很难检测/诊断。有时证明是不可能的。但是,通常会导致您的问题

c++ - std::vector 与 std::stack

std::vector和std::stack有什么区别?很明显,vector可以删除集合中的项目(尽管比列表慢得多),而堆栈被构建为仅限LIFO的集合。但是,对于最终项目的操作,堆栈是否更快?是链表还是动态重新分配的数组?我找不到关于堆栈的太多信息,但如果我正确地描绘了它们(它们类似于实际的线程堆栈;push、pop等-以及那个top()方法),那么它们似乎非常适合窗口堆叠管理。 最佳答案 stack不是容器;它是一个容器适配器。它有一个vector、deque或类似的容器,将其存储为实际保存元素的成员。记住:它被声明为:templ

c++ - std::vector 与 std::stack

std::vector和std::stack有什么区别?很明显,vector可以删除集合中的项目(尽管比列表慢得多),而堆栈被构建为仅限LIFO的集合。但是,对于最终项目的操作,堆栈是否更快?是链表还是动态重新分配的数组?我找不到关于堆栈的太多信息,但如果我正确地描绘了它们(它们类似于实际的线程堆栈;push、pop等-以及那个top()方法),那么它们似乎非常适合窗口堆叠管理。 最佳答案 stack不是容器;它是一个容器适配器。它有一个vector、deque或类似的容器,将其存储为实际保存元素的成员。记住:它被声明为:templ

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

c++ - 如何将static_assert与sizeof和stringify结合起来?

内存使用在我的应用程序中非常重要。因此,我有特定的断言,在编译时检查内存大小,如果大小与我们之前认为正确的大小不同,则给出static_assert。我已经定义了一个这样的宏:#defineCHECKMEM(mytype,size)static_assert((sizeof(objectType)==size)),"Sizeincorrectfor"#mytype"!");这个宏可以很容易地写出来:CHECKMEM(Book,144);CHECKMEM(Library,80);问题在于,当这个static_assert关闭时,可能很难找出新的大小应该是多少(例如,通过使用隐藏的编译器选

c++ - 如何将static_assert与sizeof和stringify结合起来?

内存使用在我的应用程序中非常重要。因此,我有特定的断言,在编译时检查内存大小,如果大小与我们之前认为正确的大小不同,则给出static_assert。我已经定义了一个这样的宏:#defineCHECKMEM(mytype,size)static_assert((sizeof(objectType)==size)),"Sizeincorrectfor"#mytype"!");这个宏可以很容易地写出来:CHECKMEM(Book,144);CHECKMEM(Library,80);问题在于,当这个static_assert关闭时,可能很难找出新的大小应该是多少(例如,通过使用隐藏的编译器选