草庐IT

static-initializer

全部标签

c++ - 构造函数执行顺序/顺序 : dependent initialization of static variable (class instance) in a function

对于以下代码段:classBar{public:intx;inty;Bar(int_x,int_y){/*somecodeshere*/...}};classFoo{public:intx;inty;intz;Foo(Barb):x(b.x),y(b.y){z=someFunction(x,y);}};voidf(intx,inty){Barb(x,y);staticFoox(b);}intmain(){f(2,3);}在我看来,函数内的静态变量甚至应该在main()之前初始化。但是,Foo类型的静态变量x依赖于Bar类型的局部变量b。问题是:1)x的构造函数什么时候执行?即x是在第一

c++ - Uniform Initialization with curly brace 被误认为是 Initializer List

我有一个类:#includeclassObject{std::shared_ptrobject_ptr;public:Object(){}templateObject(T&&object):object_ptr{newT{std::move(object)}}{}virtual~Object(){};};我的主要cpp文件是:#include#include"Object.hpp"classFoo{};intmain(){Objecto{Foo{}};}它给我错误:test/test.cpp:13:20:requiredfromhereinclude/Object.hpp:24:49:

c++ - 有没有办法从 `std::initializer_list` 创建用户定义的文字?

就像主题中一样:有没有办法从std::initializer_list创建用户定义的文字??我正在尝试做类似的事情:templateinlinestd::initializer_listconst&operator""_lit(std::initializer_listconst&list){returnstd::move(list);//Iamnotsure,butthislinemightcauseundefinedbehavior...wellI'llthinkaboutitlatter...}intmain(){{10,20,30,40}_lit//Error:identifi

c++ - 为什么不对 initializer_list 中的值进行类型检查?

这是如何在没有任何警告或错误的情况下编译和运行的?我不明白如何将current的取消引用值(一个int)毫无问题地分配给字符串a。classTest{public:stringa;Test(initializer_listt){autocurrent=t.begin();//Iamassigninganinttoastring!a=*current;}};intmain(){Testtest{65};printf("%s\n",test.a.c_str());}打印出来的字符串是A相比之下,这段非常相似的代码会产生编译时错误:intmain(){initializer_listtest

c++ - 'static void' 作为 decl-specifier

以下代码可以用clang编译。我想知道C++标准是否适合这个。classA{staticvoidx;//#1staticconstvoidx;//#2staticvolatilevoidx;//#3};在我看来,所有的声明都是无效的。perenialC++standardvalidationsuite有这样一个这样的测试(#1)和clang(v3.4)失败了。不过,如果我从#1中删除静态,则clang会按预期报告错误。我查看了标准,发现了一段关于静态数据成员(9.4.2-2)的内容:2Thedeclarationofastaticdatamemberinitsclassdefinitio

c++ - static constexpr char m_pszFoo[] = "***FOO***"有编译错误表达式没有计算常量

错误代码为C2131。即使我在其他文件中调用此变量的大小时,intelisense也不会提示,intelisense知道大小。我缺少什么才能使它正常工作?任何帮助是极大的赞赏。在下图中,可以看到智能感知没有提示并且还确定了大小。示例a.h:classa{private:staticconstexprcharm_pszFoo[]="***FOO***";//compileerroronthislineC2131expressiondidnotevaluatetoaconstantpublic:a(){sizeof(m_pszFoo);};//nocompileerrorhere};要重现

c++ - C++ "declaration and initialization"语句是表达式吗?

语言标准说:[Note:Clause5definesthesyntax,orderofevaluation,andmeaningofexpressions.58Anexpressionisasequenceofoperatorsandoperandsthatspecifiesacomputation.Anexpressioncanresultinavalueandcancausesideeffects.—endnote]例如我的代码如下:inti=1;Aobj;那么,上面的两个语句,算作“表达式”吗?有些人在stackoverflow上说“inti=1;”不是一个表达式。这对我来说很奇

c++ - 当 static_cast'ing 为仅移动类型时,Clang 与 GCC

考虑以下简单的仅移动类:structbar{constexprbar()=default;bar(barconst&)=delete;bar(bar&&)=default;bar&operator=(barconst&)=delete;bar&operator=(bar&&)=default;};现在,让我们创建一个包装器:templatestructbox{constexprbox(T&&x):_payload{std::move(x)}{}constexprexplicitoperatorT()&&{returnstd::move(_payload);}private:T_payl

c++ - 使用 initializer_list 初始化数组/将 initializer_list 转换为参数包

我需要使用initializer_list来初始化编译时大小的类数组。我已经知道我可以使用参数包构造函数并当场初始化它,但在这种情况下我需要使用initializer_list。如果可能,我还想避免动态初始化数组。这是伪代码:templateclassTest{public:Test(conststd::initializer_listargs):m_tData(args)//当然,对于非常量类型,我可以这样做Test(conststd::initializer_listargs){std::copy(args.start(),args.end(),m_tData);}但是如果我尝试使

c++ - GDB 错误 "cp_search_static_and_baseclasses"

我正在使用STM32Workbench(基于Eclipse的IDE),我有一个工作区,其中包含几个C++静态库和2个C++应用程序,所有这些都是使用STM32F4MCUC++应用程序或静态库模板制作的。我的第一个申请很顺利,我开始了第二个申请。该项目模板添加了一个带有无限循环的main.c,与语言无关。如果我尝试调试main.c一切正常,但如果我将文件名更改为main.cpp(我需要它以在内部使用C++类)GDB在调试前停止并出现错误:/home/build/work/GCC-5-0-build/src/gdb/gdb/cp-namespace.c:343:internal-error