草庐IT

static-members

全部标签

c++ - static_assert 依赖于类模板

考虑以下代码:templatestructmyclass{unsignedintf(){returnN;}unsignedintg(){static_assert(N>0,"");returnN-1;}};问题:我是否保证以下代码可以编译:myclassc;c.f();但以下不会:myclassc;c.f();c.g(); 最佳答案 是的,你有这个保证。来自[temp.inst]/11,强调我的:Animplementationshallnotimplicitlyinstantiateafunctiontemplate,avaria

C++ 模板 : The static member in a global object is not initialized

我有一段简单的C++代码,其中我通过专门化模板定义了一个模板和一个全局对象。对象构造函数访问专用模板中的静态成员。但事实证明,此时静态成员并未初始化。但是对于本地对象(在函数体中定义),它可以工作。我很困惑...我的c++编译器是:g++(Ubuntu5.4.0-6ubuntu1~16.04.4)5.4.020160609/////////////////////////templateclassTB{public:constchar*_name;TB(constchar*str):_name(str){coutclassTA{public:constchar*_name;TA(con

C++ 模板 : The static member in a global object is not initialized

我有一段简单的C++代码,其中我通过专门化模板定义了一个模板和一个全局对象。对象构造函数访问专用模板中的静态成员。但事实证明,此时静态成员并未初始化。但是对于本地对象(在函数体中定义),它可以工作。我很困惑...我的c++编译器是:g++(Ubuntu5.4.0-6ubuntu1~16.04.4)5.4.020160609/////////////////////////templateclassTB{public:constchar*_name;TB(constchar*str):_name(str){coutclassTA{public:constchar*_name;TA(con

c++ - Visual Studio 构建错误 : unresolved external symbol _IID_IWICImagingFactory (MFC static lib)

我在一个SDI(启用文档/View)项目中编写了一个带有几个标准对话框的程序。现在我想把它发送给一些friend,我确实设置了MFC的使用在静态库中使用MFC。但是当我尝试构建解决方案时,我收到以下错误:errorLNK2001:unresolvedexternalsymbol_IID_IWICImagingFactory我的问题是,我不知道这个接口(interface)id到底是什么,因为我没有手动为COM编写任何代码,也没有使用任何图像工厂的东西或类似的东西......我有点迷路了……谁能告诉我如何解决这个问题并使其与静态MFC一起使用?提前致谢! 最佳

c++ - Visual Studio 构建错误 : unresolved external symbol _IID_IWICImagingFactory (MFC static lib)

我在一个SDI(启用文档/View)项目中编写了一个带有几个标准对话框的程序。现在我想把它发送给一些friend,我确实设置了MFC的使用在静态库中使用MFC。但是当我尝试构建解决方案时,我收到以下错误:errorLNK2001:unresolvedexternalsymbol_IID_IWICImagingFactory我的问题是,我不知道这个接口(interface)id到底是什么,因为我没有手动为COM编写任何代码,也没有使用任何图像工厂的东西或类似的东西......我有点迷路了……谁能告诉我如何解决这个问题并使其与静态MFC一起使用?提前致谢! 最佳

c++ - 静态成员变量如何影响对象大小?

我想知道静态成员变量通常如何在C++等语言中实现,以及它们的使用是否会影响实例化对象的大小。我知道静态成员由该类的所有实例共享,但它是如何共享的?如果它影响对象大小,那么拥有10个静态变量会增加比1更多的大小吗?我之所以这么问,是因为我可以想到两种可能的实现方式:向每个对象添加指向静态数据的指针,类似于某些实现添加指向虚函数表的指针的方式静态数据只是像全局变量一样被直接引用,偏移量由链接器/加载器解析 最佳答案 在C++中,静态成员不属于类的实例。它们甚至不会增加实例和类的大小1位!structA{inti;staticintj;}

c++ - 静态成员变量如何影响对象大小?

我想知道静态成员变量通常如何在C++等语言中实现,以及它们的使用是否会影响实例化对象的大小。我知道静态成员由该类的所有实例共享,但它是如何共享的?如果它影响对象大小,那么拥有10个静态变量会增加比1更多的大小吗?我之所以这么问,是因为我可以想到两种可能的实现方式:向每个对象添加指向静态数据的指针,类似于某些实现添加指向虚函数表的指针的方式静态数据只是像全局变量一样被直接引用,偏移量由链接器/加载器解析 最佳答案 在C++中,静态成员不属于类的实例。它们甚至不会增加实例和类的大小1位!structA{inti;staticintj;}

c++ - 在 C++0x 中是否有类似 static_assert 的东西给出警告而不是错误?

我想为可能效率低但不一定不正确的用法这样做。 最佳答案 没有。断言失败表示程序无法完成的问题(无论是执行[运行时断言],还是编译[静态断言])。实际上,只要实现发出诊断(包括继续执行),就可以执行任何操作。但是,在实践中,主流工具链的行为都几乎相同:它们会出错。您当然不能将它们破解为用户定义的内容。 关于c++-在C++0x中是否有类似static_assert的东西给出警告而不是错误?,我们在StackOverflow上找到一个类似的问题: https://

c++ - 在 C++0x 中是否有类似 static_assert 的东西给出警告而不是错误?

我想为可能效率低但不一定不正确的用法这样做。 最佳答案 没有。断言失败表示程序无法完成的问题(无论是执行[运行时断言],还是编译[静态断言])。实际上,只要实现发出诊断(包括继续执行),就可以执行任何操作。但是,在实践中,主流工具链的行为都几乎相同:它们会出错。您当然不能将它们破解为用户定义的内容。 关于c++-在C++0x中是否有类似static_assert的东西给出警告而不是错误?,我们在StackOverflow上找到一个类似的问题: https://

c++ - double 类型的静态类成员的常量表达式初始值设定项

在C++11和C++14中,为什么我需要在以下代码段中使用constexpr:classFoo{staticconstexprdoubleX=0.75;};而这会产生编译器错误:classFoo{staticconstdoubleX=0.75;};而且(更令人惊讶的是)编译没有错误?classFoo{staticconstdoubleX;};constdoubleFoo::X=0.75; 最佳答案 在C++03中,我们只允许为枚举类型的const积分的静态成员变量提供类内初始化器,在C++11中,我们可以使用constexpr在类中