草庐IT

初始化OpenStack

全部标签

c++ - 在类模板中使用 = 的类内初始化器

我很抱歉,但我不明白为什么以下内容不起作用(gcc4.8.1):#includeusingnamespacestd;templatestructA{//A():s("why"){}//fine//strings{"what"};//alsofine//A()=default;//(sameerrorasbelow)strings="why?!";//error:conversionfrom'constchar[6]'tonon-scalartype'std::string{akastd::basic_string}'requested|};structB{strings="why?!"

c++ - 文件范围的原子是否受初始化顺序失败的影响?

考虑以下情况,我们在不同的翻译单元中有两个文件范围的对象,这是通过初始化顺序失败的未定义行为的通常设置:a.hpp:structthing{public:thing(intvalue);~thing();intvalue()const;staticintcount();private:int_value;};a.cpp:#include"a.hpp"#includenamespace{std::atomicthings;}thing::thing(intvalue):_value(value){++things;}thing::~thing(){--things;}intthing::

c++ - 扩展 std::tuple 以用作类的初始化程序

我想使用std::tuple的所有元素作为一个类的初始化器。有比std::get(std::tuple)更简单的方法吗?对于元组的每个元素?std::get的最小工作示例:#include#include#includestructA{std::stringstring1;intintVal;std::stringstring2;};intmain(){std::tuplemyTuple("S1",42,"S2");AmyA{std::get(myTuple),std::get(myTuple),std::get(myTuple)};assert(myA.string1=="S1");

c++ - 在初始化该类的静态对象之前,是否保证初始化该类的静态成员?

我最近在一次代码审查中遇到了这个C++静态初始化顺序相关的查询。我在编译单元中有一个带有静态成员变量的类我有一个在不同编译单元中使用构造函数的类的静态对象这里,我想知道静态成员变量是否保证在调用静态对象构造函数之前被初始化?MyClass.h:typedefint(*MyFunc)(int);classMyClass{MyClass(MyFuncfptr){mFunc=fptr;}staticMyFuncmFunc;}MyClass.cpp:MyFuncMyClass::mFunc=nullptr;MyDifferentClass.h:MyDifferentClass{public:s

Ruby在Rails上的非初始化控制器常数5

我得到一个uninitializedconstantProject::Controller。我在此处查看了Rails文档和帖子,但是该代码似乎正确设置了。我在用rails5.1.1。我的页面路径正常工作,只有根路径给出错误。路由.rbRails.application.routes.drawdodevise_for:admin_users,ActiveAdmin::Devise.configActiveAdmin.routes(self)devise_for:users,path:'',path_names:{sign_in:'login',sign_out:'logout',edit:'pr

c++ - 显式构造函数和嵌套初始化列表

下面的代码可以用大多数现代C++11兼容编译器(GCC>=5.x、Clang、ICC、MSVC)成功编译。#includestructA{explicitA(constchar*){}A(std::string){}};structB{B(A){}B(B&)=delete;};intmain(void){Bb1({{{"test"}}});}但是为什么首先要编译它,列出的编译器如何解释该代码?为什么MSVC能够在没有B(B&)=delete;的情况下编译这个,但是其他3个编译器都需要吗?以及为什么当我删除时它在除MSVC之外的所有编译器中都失败不同的签名复制构造函数,例如B(const

c++ - 类模板特化推导是否应该考虑推导指导参数初始化?

作为此question的跟进,我测试了clang和gcc的行为。看来这两个编译器对c++标准有不同的解释。在下面的示例中,如果根据推导指南假设的构造函数参数需要复制不可复制的参数,则GCC拒绝编译。Clang不执行此检查:#includestructnot_copyable{not_copyable()=default;not_copyable(constnot_copyable&)=delete;};structmovable{movable()=default;movable(movable&&);};templatestructA{templateA(Tsconst&...){}

c++ - 如何在编译时使用手动给定的一些元素初始化数组?

我正在使用指向函数的指针数组。由于某些元素不能用函数模板表达,所以我写了这样的代码。externvoidzero();//isr0isdefinedsomewhereelsevoidone(){//isr1}templatevoidNth(){//isrN}usingfunc=void(*)();constexprfuncinterrupt_vector[256]={&zero,&one,&Nth,&Nth,...&Nth,&Nth,};我读过有关使用可变参数模板生成静态表的内容,但那些都是关于初始化整个数组的。如何简化代码?@其实是中断vector的一部分。因为它应该被直接调用,所以

c++ - 静态成员初始化期间访问私有(private)静态函数

我有一个带有静态成员的类。这将使用同一类的私有(private)静态函数进行初始化。#include#includeclassA{public:staticstd::stringconsts;private:staticstd::stringmake(){return"S";}};std::stringconstA::s=A::make();intmain(){std::cout我的问题是:由于哪条规则允许这样做?显然注释部分不起作用,因为不允许我从类外访问私有(private)函数。那么为什么私有(private)静态成员在启动时的初始化是一个特例呢?(附带说明:这条规则的目的是什么

c++ - 所有版本的 GCC 都与默认成员初始化器斗争,它捕获了这个,并结合了继承的构造函数

这个故事和我之前的故事相似question.所有支持C++11的GCC版本都具有这种行为。我找不到与我的测试用例有冲突的任何其他编译器。测试用例:structBaseFooWrapper{BaseFooWrapper(intqux){}};structFoo{Foo(BaseFooWrapper&foo):foo(foo){}BaseFooWrapper&foo;};structSomeFooWrapper:publicBaseFooWrapper{usingBaseFooWrapper::BaseFooWrapper;Foofoo{*this};};intmain(){SomeFoo