草庐IT

static_allocator

全部标签

c++ - 编译时等效的 std::cout,或 c++11 中编译时常量值的 static_assert 字符串化

有没有办法打印constexpr的值?或#defined编译时的值?我想要std::cout的等价物,或某种方式来做类似的事情constexprintPI_INT=4;static_assert(PI_INT==3,const_str_join("PI_INTmustbe3,not",const_int_to_str(PI_INT)));编辑:我可以使用constexpr进行一些基本的编译时打印s,至少在gcc上做类似的事情templatestructdisplay_non_zero_int_value;templatestructdisplay_non_zero_int_value{

c++ - 警告 C4316 : object allocated on the heap may not be aligned 16

重要信息:开发操作系统:Windows8.164位目标操作系统:Windows8.164位IDE:VisualStudio2013专业版语言:C++问题:通过IDE编译我的静态库项目时收到以下警告:warningC4316:...:objectallocatedontheheapmaynotbealigned16我可以简单地忽略此警告...但我假设它的存在是有原因的,并且希望至少了解它的含义以及它对future可能产生的影响。我认为这行代码与问题有关,在我的Win32窗口包装类中调用:m_direct3D=newDirect3D(this);m_direct3D是一个指向我的Direc

c++ - MSVC++ : template's static_assert is not triggered inside a lambda

更新2:这已在VS2019Preview16.1Preview1中得到修复。更新:我已在visualstudio.com提交错误报告.所以我开始研究C++的模板,当我试图阻止使用static_assert编译模板类时遇到了这个问题。基本上,static_assert错误在VS2017上使用C++语言标准:ISOC++17标准(/std:c++17)。我也在gcc-7上使用-std=c++17进行了尝试,并触发了错误。这是VS2017上的错误还是我遗漏了什么?代码示例:#include#include#includetemplateclassIntegralContainer{stati

c++ - 为什么 static_cast(*this) 到基类会创建一个临时拷贝?

我正在阅读EffectiveC++并遇到了这个例子:classWindow{//baseclasspublic:virtualvoidonResize(){...}//baseonResizeimpl...};classSpecialWindow:publicWindow{//derivedclasspublic:virtualvoidonResize(){//derivedonResizeimpl;static_cast(*this).onResize();//cast*thistoWindow,//thencallitsonResize;//thisdoesn'twork!.../

c++ - static_cast<int>(foo) 与 (int)foo

有人能详细说明一下区别吗? 最佳答案 不同之处在于(int)foo可以表示六种不同的东西。它可能是一个static_cast(在静态已知类型之间转换),它可能是一个const_cast(添加或删除const-ness),或者它可能是一个reinterpret_cast(在指针类型之间转换)编译器会尝试每一个,直到找到一个可以工作的。这意味着它可能不会总是选择您期望的那个,因此它可能会成为一个微妙的错误来源。此外,static_cast更容易搜索或进行搜索/替换。 关于c++-static

C++ static_cast 运行时开销

请看下面的代码。a)在这种情况下(简单继承,没有虚拟成员),B::df()中的静态转换是否有任何开销(无论如何)?我发现了一些类似问题的相互矛盾的答案,这就是我问的原因......b)我正在考虑将A中的constM1*func设为私有(private),并在B中引入一个新的私有(private)字段constM2*func以避免强制转换,但它有点使事情复杂化并使智能指针的使用更加困难。你有没有更好的方法来避免Actor阵容?classM1{public:doublef()const;};classM2:publicM1{public:doubledf()const;};classA{p

c++ - 为什么 std::allocator 在 C++17 中丢失了成员类型/函数?

在查看std::allocator时,我看到成员(member):value_type,指针,const_pointer,引用,const_reference,size_type,difference_type,以及rebind已全部弃用。分配器也将不再拥有成员:address、max_size、construct或destroy。为什么会这样?是否与多态分配器有关? 最佳答案 如果您查看therelevantisocpppaper你可以看到你提到的第一个集合现在被认为放在std::allocator_traits中更好。.自从ST

c++ - 命名空间 -`static` 在 C++11 中是否仍被弃用?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Deprecationofthestatickeyword…nomore?在C++2003中,不推荐使用命名空间-static:[C++03:7.3.1.1/2]:Theuseofthestatickeywordisdeprecatedwhendeclaringobjectsinanamespacescope(seeannexD);theunnamed-namespaceprovidesasuperioralternative.我在C++2011中找不到任何此类子句存在的位置(建议弃用),并且7.1.1似乎并

c++ - _CRTDBG_MAP_ALLOC 不显示文件名

我正在尝试检测内存泄漏,并且我正在使用make_CRTDBG_MAP_ALLOC宏来定位泄漏区域的位置。所以我定义MACRO如下:#ifdef_DEBUG#define_CRTDBG_MAP_ALLOC#include#include#defineDEBUG_NEWnew(_NORMAL_BLOCK,__FILE__,__LINE__)#definenewDEBUG_NEW#endif在我的代码中,我有:UINTSomeFunThread(LPVOIDpParam){_CrtMemStatecrtMemStateStart;_CrtMemStatecrtMemStateFinish;_

c++ - 为什么 typedef 不能与 static 一起使用?

为什么typedef不能和static一起使用?比如下面的代码就是一个错误typedefstaticintINT2;使用typedef应该遵循哪些其他规则?还有哪些关键字不能与typedef一起使用?非常感谢! 最佳答案 typedef不声明变量的instance,它声明了一个类型(实际上是类型别名),static是您应用于实例而非类型的限定符,因此您可以在使用类型时使用static,但在定义类型时不能使用。像这样..typedefintint32;staticint32foo; 关于c