草庐IT

static-initialization

全部标签

c++ - 解决 "only static const integral data members can be initialized within a class"编译错误

以下创建全局对象会导致编译错误。#include"stdafx.h"#includeusingnamespaceSystem;usingnamespacestd;#pragmahdrstopclassTester;voidinput();classTester{staticintnumber=5;public:Tester(){};~Tester(){};voidsetNumber(intnewNumber){number=newNumber;}intgetNumber(){returnnumber;}}TestertesterObject;voidmain(void){cout>ne

c++ - std::unique_ptr 删除函数,initializer_list - 驱动分配

全部,当我使用初始化列表格式实例化小部件数组时,指向成员变量小部件实例的裸指针可以编译,但在更改为std::unique_ptr后,gcc会给出有关已删除函数的编译错误。$uname-aLinux..3.5.0-21-generic#32-UbuntuSMP2012年12月11日星期二18:51:59UTCx86_64x86_64x86_64GNU/Linux$g++--versiong++(Ubuntu/Linaro4.7.2-5ubuntu1)4.7.2此代码给出以下编译器错误:#include#includeclassWidget{public:Widget(){}};class

c++ - std::initializer_list 的底层结构是什么?

第一部分:std::initializer_list是C++11的一个非常有用的特性,所以我想知道它是如何在标准库中实现的。从我读到的here,编译器创建一个T类型的数组并给出指向initializer_list的指针.它还声明复制initializer_list将创建一个引用相同数据的新对象:为什么会这样?我会猜到它要么:为新的initializer_list复制数据将数据的所有权转移到新的initializer_list第二部分:来自std::vector的众多在线引用资料之一构造函数:vector(initializer_listil,constallocator_type&al

c++ - static_cast 可以将非空指针转换为空指针吗?

我需要为回调函数编写代码(它将在ATL中调用,但这并不重要):HRESULTcallback(void*myObjectVoid){if(myObjectVoid==0){returnE_POINTER;}CMyClass*myObject=static_cast(myObjectVoid);returnmyObject->CallMethod();}这里的void*保证是指向CMyClass的指针,所以static_cast是合法的。我关心的是代码必须尽可能可移植(至少对于较新版本的VisualC++)。所以super偏执狂我也倾向于检查CMyClass*指针-我的意思是如果结果为空

c++ - 类内部和外部的 static 关键字

static关键字一般是跟内部链接有关,但是在类内部使用的static关键字是有外部链接的吧?下面的变量m、n可以在类文件之外访问。classc{inti;intj;staticintm;staticintn;public:voidzap();staticvoidclear();}; 最佳答案 没错。关键字static被严重重载,具有太多不同的含义:在命名空间范围内的变量或函数上,它给出名称内部链接。在类成员上,它使其成为静态成员,这不会影响链接。在函数范围内的变量上,它赋予变量“静态存储持续时间”,而不是“自动”或“动态”存储持续

c++ - 为什么 C++ 标准要求 `Clock::now` 函数为 `static` ?

在C++11中,C++在标准中有一些计时工具。这些设施之一是时钟的标准接口(interface),它基本上允许在调用时钟的now函数时获取时间。到目前为止一切都很好,但我看不出要求now是静态函数的原因。在托管系统上,标准时钟可能可以纯粹通过系统调用或通过读取处理器计数器等来实现。但是,这限制了需要维护某些状态的自定义时钟的实现。使用此接口(interface),要么无法实现某些时钟,要么必须使用全局状态。我遇到的一个问题基本上是将本地时钟与我从NTP服务器获取的时间同步。代码看起来像这样:classsntp_clock{public:sntp_clock():local_time_a

c++ - 开关盒 : declaration-with-initialization & declaration-and-then-assignment

在switch-case语句中,declaration-with-initialization是无效的,但允许declaration-and-then-assignment。如以下代码片段所示。从编译器端看,这两种类型的初始化有什么区别?以及为什么第一种初始化无效而第二种初始化有效。switch(val){case0:intnewVal=42;//Invalidbreak;case1:intnewVal2;//ValidnewVal2=42;break;case2:break;} 最佳答案 实际上,规则是您不能跳入经过具有初始化的声

c++ - 为什么这段将字符串初始化为单个字符的代码会调用 initializer_list 构造函数?

我最近在做一个C++项目,遇到了一个边缘案例,其中包含我无法完全理解的字符串构造函数。相关代码(youcanrunhere)如下:#include#includeusingnamespacestd;intmain(){stringdirectParens(1,'*');stringdirectBraces{1,'*'};stringindirectBraces={1,'*'};cout字符串的大括号初始化版本最终包含两个字符,即一个char,其数值为1,后跟一个星号。我不明白为什么字符串的大括号初始化版本调用initializer_list构造函数,而不是构造函数接受一个大小和一个字符

c++ - 对相同(原始)类型的 static_cast 会产生任何代码吗?

我想这一切都在标题中说了...但这是一个例子。给定voidfunctionThatTakesAFloat(floatpar);floatf=3.5f;做functionThatTakesAFloat(static_cast(f));与相比产生任何额外的代码functionThatTakesAFloat(f);或者这个static_cast是否被编译器完全消除了?编辑:我正在使用VC++(2010) 最佳答案 5.2.9/-2-AnexpressionecanbeexplicitlyconvertedtoatypeTusingasta

c++ - static_cast<char*> 和 (char*) 之间的区别

这是我的第一个问题:)我有一堆文件,我打开它如下图所示;ifstreamin(filename,ios::binary|ios::in)然后,我希望在unsignedinthold中保存2个字节的数据;unsignedinthold;in.read(static_cast(&hold),2);这对我来说似乎是正确的。但是,当我用编译它时g++-ansi-pedantic-errors-Werror--Wall-omainmain.cpp编译器报错error:invalidstatic_castfromtype‘unsignedint*’totype‘char*’其实我已经通过将stat