草庐IT

static-initializer

全部标签

c++ - 使用 C++ 样式转换从 Void* 转换为 TYPE*​​ : static_cast or reinterpret_cast

因此,如果您从Void*转换为Type*或从Type*转换为Void*,您应该使用:voidfunc(void*p){Params*params=static_cast(p);}或voidfunc(void*p){Params*params=reinterpret_cast(p);}对我来说static_cast似乎更正确,但我已经看到两者用于同一目的。此外,转换的方向是否重要。即我是否仍应将static_cast用于:_beginthread(func,0,static_cast(params)我已经阅读了关于C++样式转换的其他问题,但我仍然不确定这种情况下正确的方法是什么(我认为

c++ - 将 CRTP 与 static_assert 一起使用时出现编译器错误

考虑以下代码:templatestructBase{staticconstexprintx_base=Derived::x_derived;//static_assert(x_base>1,"Oops");};structDerived:publicBase{staticconstexprintx_derived=5;};Baseobj;这在gcc上编译得很好,但如果我取消注释static_assert行,它会提示error:incompletetype'Derived'usedinnestednamespecifierstaticconstexprintx_base=Derived:

c++ - 链接 : Static vs Dynamic

在我的应用程序中,我有3个主要部分:Exe:一个可执行文件Lib_A:一个库包含一个单例类和一个基类,用于在单例中使用一些计算类Lib_B:一个库包含许多从Lib_A中派生的类我在Lib_B中有派生类的原因是,我想在运行时从Exe编译Lib_B。我需要在计算期间生成派生类而不终止整个系统。这对我来说太重要了。这意味着最初我可能会说动态加载Lib_B1,我也可能将其他版本的Lib_B编译为Lib_B2、Lib_B3、Lib_B4等,并动态加载它们。所有Lib_Bx库都将具有入口点函数以导出其中的类。所以考虑到以下事实:在运行时会有不同数量的文件共享同一个Lib_A。应用程序必须在Wind

c++ - 重新定义 malloc/free with static linking has multiple definition error

我公司最近想把编译器从gcc-3.4更新到gcc-4.5。但是,我们客户的机器可能没有最新的libstdc++.so,所以我们想静态链接我们的二进制文件。我们的程序需要定制的malloc()/free()以满足非常高的性能要求。我修改了makefile,在链接时添加了一个-static,得到了以下错误信息:/usr/lib64/libc.a(malloc.o)(.text+0x18c0):Infunction`free'::multipledefinitionof`free'../../ic/src/memmgr/libmemmgr_mt_thread.a(memmgr_mt_thre

c++ - 有人给我一个使用 QVector::QVector(std::initializer_list<T> args) 的例子吗?

谁能给我一个使用以下构造函数intQt的例子?QVector::QVector(std::initializer_listargs); 最佳答案 采用std::initializer_list的构造函数使用列表初始化时会考虑。这是一个涉及花括号初始化列表的初始化:QVectorv{1,2,3,4,5};//orequivalentlyQVectorv={1,2,3,4,5};请注意,这是C++11的特性。事实上,第一种语法是C++11的新语法,而第二种语法可以在C++03中用于聚合初始化。您还可以使用直接初始化并将初始化列表作为参数

c++ - 从 Derived* 到 void* 到 Base* 的 static_cast

我想将指向派生类成员的指针转换为void*,然后从那里转换为基类的指针,如下例所示:#includeclassBase{public:voidfunction1(){std::cout(&d);Base*baseptr=static_cast(ptr);baseptr->function1();baseptr->function2();}这会编译并给出所需的结果(分别打印1和2),但它能保证工作吗?我在这里找到的static_cast的描述:http://en.cppreference.com/w/cpp/language/static_cast只提到转换为void*并返回到指向相同类

c++ - static_cast<T> 对 T& 做了什么?

所以我问了thisquestion我正在尝试通过static_cast解决它。(顺便说一句,它确实解决了问题,我只是不确定我是否理解为什么。)在代码中:vectorfoo={0,42,0,42,0,42};replace(begin(foo),end(foo),static_cast(foo.front()),13);static_cast是否只是构造一个R值int?那和只是打电话有什么区别:replace(begin(foo),end(foo),int{foo.front()},13);编辑:根据答案static_cast的推断,确实似乎构造了一个R值int:http://ideon

c++ - 针对 "initialize()"方法而不是构造函数的参数

我目前负责查找我们代码库中的所有不良做法,并说服我的同事修复有问题的代码。在我的探索过程中,我注意到这里的很多人都使用以下模式:classFoo{public:Foo(){/*Donothinghere*/}boolinitialize(){/*Doalltheinitializationstuffandreturntrueonsuccess.*/}~Foo(){/*Doallthecleanup*/}};现在我可能是错的,但对我来说这个initialize()方法很糟糕。我相信它取消了拥有构造函数的全部目的。当我问我的同事为什么做出这个设计决定时,他们总是回答说他们别无选择,因为你不

c++ - *static* 关键字在成员方法声明中的位置

有什么区别吗classC{staticintfunc();};和classC{intstaticfunc();};我正试图在其他人的代码库中删除关键字static。在我这样做之前,我想确保我理解第二个示例的含义。[编辑]删除static的原因:C是一个没有成员变量且充满静态方法的“类”。我认为让“C”成为具有正常功能的命名空间而不是类更合适。 最佳答案 没有区别。函数声明上的static适用于该函数。this指针不会隐式传递给此函数,因此如果不显式将对象传递给函数,则无法访问此函数内部的非静态类成员。首先要删除static,您应该知

c++ - 成员初始化列表 : initialize two members from a function returning a tuple

memberinitializerlist中的多个成员是否可以从函数获得的元组中初始化?随着通过元组返回多个值变得越来越流行,我希望有一个解决方案。除了语言限制,我看不出有什么其他原因无法做到这一点。这是我所拥有的mcve:autonew_foo(std::size_tsize)->std::tuple,int*>{autobuffer=std::make_unique(size*sizeof(int)+8);autobegin=static_cast(static_cast(buffer.get()+4));returnstd::make_tuple(std::move(buffer