草庐IT

static-initializer

全部标签

c++ - 使用右值 initializer_list 进行类型推断

在下面的代码中#include#includetemplatevoidf(T&&x){}templatevoidg(std::initializer_listx){}intmain(){autox={0};//OKauto&&y={0};//OKg(x);//OKg(std::move(x));//OKg({0});//OKf(x);//OKf(std::move(x));//OKf({0});//failurereturn0;}右值initializer_list可以用auto推导,但不能用template推导。为什么C++禁止这样做? 最佳答案

c++ - 委派构造函数 : an initializer for a delegating constructor must appear alone

我有一对构造函数,它们在C++03风格中工作得很好。其中一个构造函数调用父类(superclass)(或基类)构造函数...classWindow:publicRectangle{public:Window():win(newRawWindow(*this)){refresh();}Window(Rectangle_rect):Rectangle(_rect),win(newRawWindow(*this)){refresh();}...我正在尝试弄清楚如何使用新的C++11委托(delegate)构造器功能来稍微整理一下。但是,下面的代码给出了以下编译器错误...classWindo

c++ - initializer_list 不可变的性质导致过度复制

为什么访问std::initializer_list不允许我们改变它的内容?在将std::initializer_list用于其主要目的(初始化容器)时,这是一个很大的缺点,因为它的使用会导致过多的复制构造/复制赋值,而不是move构造/move分配。#include#include#include#includestructA{A()=default;A(Aconst&){std::cout{A{},A{},A{}};returnEXIT_SUCCESS;}Output(如预期的那样):A::A(constA&)A::A(constA&)A::A(constA&)为什么它的设计如此受

c++ - 列表初始化和 initializer_list 构造函数的失败重载解析

以下无法通过clang35-std=c++11编译:#include#include#includeclassA{public:A(int,bool){std::cout){std::cout有错误init.cpp:15:14:error:type'double'cannotbenarrowedto'int'ininitializerlist[-Wc++11-narrowing]Aa1={1,1.0};^~~init.cpp:15:14:note:insertanexplicitcasttosilencethisissueAa1={1,1.0};^~~static_cast()OTOH

c++ - 检查元素是否在 std::initializer_list 中

我希望能够用C++编写类似于以下Python代码的内容:ifxin[1,2,3,5]...测试一个元素是否包含在一组硬编码值中,就地定义。像这样:if(in(x,{1,2,3,5}))...下面是in函数的可能实现:templateboolin(constT&x,std::initializer_listc){returnstd::find(c.begin(),c.end(),x)!=c.end();}我的问题是:我真的必须自己编写这个函数吗?那里有任何默认实现吗?也许在boost?我检查了boost::contains,但它只适用于字符串。 最佳答案

c++ - 使用 initializer_list 初始化数组?

这个问题在这里已经有了答案:HowdoIinitializeamemberarraywithaninitializer_list?(8个答案)关闭7年前。有可能吗?#include#includestructA{A(std::initializer_listl):m_a(l){}std::arraym_a;};intmain(){Aa{1,2};}但这会导致这个错误:t.cpp:Inconstructor‘A::A(std::initializer_list)’:t.cpp:7:19:error:nomatchingfunctionforcallto‘std::array::array

C++ static_cast 和引用

structA{};structB:A{};intmain(){Aa;A&a_ref=a;static_cast(a);//*1static_cast(a_ref);//*2return0;}(*1)产生错误,我明白为什么。(*2)编译正常,但为什么呢?而且,只要它编译并假设B包含一些属性,如果我将a_ref转换为B&然后尝试访问属性会怎样?我想我会遇到运行时错误或其他问题。所以,正如我所看到的,有一种情况会导致崩溃,并且没有办法避免它,这与dynamic_cast不同,后者可以检查转换结果是否为null或输入代码在try-catch区域。我如何处理这种情况,我需要转换引用并确保我真的

c++ - 如何在 C++ 中将 static_assert 用于 constexpr 函数参数?

我的库中有几个简短的constexpr函数可以执行一些简单的计算。我在运行时和编译时上下文中都使用它们。我想在这些函数的主体中执行一些断言,但是assert(...)在constexpr函数和static_assert中无效(...)不能用于检查函数参数。例子:constexprintgetClamped(intmValue,intmMin,intmMax)noexcept{assert(mMinmMax?mMax:mValue);}有没有办法检查函数是否在运行时或编译时常量中执行,并且仅当它在运行时执行时才执行断言-时间?constexprintgetClamped(intmValu

c++ - static_assert - 一种动态自定义错误消息的方法

有没有办法让static_assert的字符串动态自定义然后显示?我的意思是://pseudocodestatic_assert(Check_Range::value,"Valueof"+typeof(T)+"typeisnotsogood;)"); 最佳答案 没有,没有。但这并不重要,因为static_assert是在编译时求值的,如果出现错误,编译器不仅会打印消息本身,还会打印实例堆栈(在模板的情况下)。看看这个综合示例inideone:#includetemplatestructIsInteger{staticboolcons

c++ - 重载 static_cast?

所以,前几天我参加了考试,其中一个问题与此非常相似:我们有一个类叫做Square其中包含一个变量intside.我们怎样才能使cout(aSquare)成为可能会打印出aSquare的面积吗?这可能吗? 最佳答案 有可能做到这一点,但不能通过重载static_cast().您可以通过重载类型转换运算符来实现:classSquare{public:Square(intside):side(side){}operatorint()const{returnside*side;}//overloadedtypecastoperatorpri