草庐IT

Initialization

全部标签

c++ - initializer_list 结合其他参数

假设我有一个类,它在构造函数中采用T类型的参数和U类型的参数集合。以下解决方案有效:structQ{Q(Tt,std::initializer_listus);};创建此类的实例将是:Qq{t1,{u1,u2,u3,u4}};但这对我来说看起来有点不干净。有比这个更好的解决方案吗? 最佳答案 您需要的是可变参数模板(c++11特性)。#includestructT{};structU{};classQ{public:templateQ(Tt,ArgTypes...args):Q(t,{args...}){}private:Q(Tt,

c++ - 创建对象时理解 {...} 的含义

我遇到了以下代码#include#include#include#include#include#includeintmain(){std::stringinputfilename,outputfilename;std::cin>>outputfilename;std::ofstreamoutputfile{outputfilename};outputfile我的第一react是它不应该编译。我从未见过outputfile{outputfilename};语法。有人能告诉我C++语言的什么特性定义了这行代码中{...}的行为吗?附言该代码可以正常工作,并且可以达到您的预期。

C++ 在同一行中声明多个变量

我知道像这样声明变量inta=10,b=15,c=20是可能的而且没问题,但是在c++编程语言的任何程序中是否可以声明变量像这样inta,b,c=10,15,20其中a需要是10,b需要是15和c是20。在C++中这样声明变量是否可行?编辑:重载运算符=是否可行? 最佳答案 编译器将针对此类声明发出错误inta,b,c=10,15,20;我脑海中唯一的想法是:)inta,b,c=(a=10,b=15,20);或者您可以使这些名称成为结构的数据成员struct{inta,b,c;}s={10,20,30};EDIT:Isitpossi

c++ - 如何使数组的派生类型接受聚合初始化?

例如classA:publicstd::array{};和Aa{1,2,3};//failedcurrently.如何让数组的派生类型接受聚合初始化? 最佳答案 您可以提供一个可变模板构造函数,如下所示:classA:publicstd::array{public:templateconstexprA(Args&&...args):std::array{{std::forward(args)...}}{}};LiveDemo编辑:以下版本也适用于VisualStudio:classA:publicstd::array{public:

C++11 函数局部静态常量对象的线程安全初始化

此问题已在C++98上下文中提出,并在该上下文中得到回答,但没有明确说明C++11constsome_type&create_const_thingy(){lockmy_lock(some_mutex);staticconstsome_typethe_const_thingy;returnthe_const_thingy;}voiduse_const_thingy(){staticconstsome_type&the_const_thingy=create_const_thingy();//usethe_const_thingy}这个初始化模式会确保:没有出现竞争条件create_co

c++ - 为什么结构属性声明和初始化顺序会这样?

我最近遇到了这个:#include#include#include#include//sortfunction#include//functionsutilities#include//randomnumbersgenerationusingnamespacestd;default_random_enginegenerator;uniform_int_distributiondistribution(0,9999);autorandomer=bind(distribution,generator);structTest_struct{stringord_as_string;intord

c++ - 什么时候初始化匿名命名空间数据?

我一直在使用匿名命名空间来存储本地数据和函数,想知道什么时候初始化数据?是当应用程序以与静态数据相同的方式启动时还是依赖于编译器?例如://foo.cpp#include"foo.h"namespace{constintSOME_VALUE=42;}voidfoo::SomeFunc(intn){if(n==SOME_VALUE){...}}问题源于使一些代码线程安全。在上面的例子中,我需要确定SOME_VALUE在第一次调用SomeFunc之前被初始化。 最佳答案 C++标准,3.6.2/1:Zero-initialization

c++ - 是否可以将成员初始化推迟到构造函数主体?

我有一个类,其成员是一个对象,但没有默认构造函数。我想在构造函数中初始化这个成员,但在C++中我似乎做不到。这是类(class):#include#includeusingboost::asio::ip::udp;templateclassudp_sock{public:udp_sock(std::stringhost,unsignedshortport);private:boost::asio::io_service_io_service;udp::socket_sock;boost::array_buf;};templateudp_sock::udp_sock(std::strin

c++ - 初始化多态指针容器

我可以初始化多态boost::ptr_vector与boost::assign::list_of?#include#includeboost::ptr_vectorls=boost::assign::list_of(newAnt)(newBee)(newCat);编译失败:error:nomatchforcallto'(boost::assign_detail::generic_list)(Bear*)'替换boost::ptr_vector与std::vector给出相同的错误。两个人建议手动提供模板参数Animal*至list_of:boost::assign::list_of(n

c++ - 在 C++ 中将时间 append 到字符串时出现访问冲突错误

采用以下代码:#inlcude#includeusingnamespacestd;intmain(intargc,char*argv[]){time_tt;time(&t);strings="file"+t;return0;}在线strings="file"+t我收到访问冲突错误。如果我将其更改为:#include使用命名空间标准;intmain(intargc,char*argv[]){time_tt;time(&t);intx=t;strings="file"+x;return0;}我仍然得到同样的错误。怎么了?将intappend到字符串肯定不会引发访问冲突吗?