草庐IT

uniform-initialization

全部标签

c++ - 如何 move initializer_list 的元素?

假设您有一个std::vector类型的变量并使用初始化列表对其进行初始化:usingV=std::vector;Vv={"Hello","little","world","of","move","semantics"};编译器会创建一个临时的std::string对于每个字符串文字,创建一个初始化列表,然后调用V的ctor并创建vector。ctor不知道所有这些字符串都是临时的,所以它复制每个字符串。我没有在标准中找到任何允许vectorctor在临时元素时move它们的内容。我是否遗漏了什么或者使用初始化列表会导致不必要的拷贝?我正在编写这个问题可能导致代码效率显着低下的类。任何

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++ - ={} 和 {} 风格的初始化在 C++11 中是否相同?

C++11引入了{}样式的初始化。但是这两种形式吗Tx{...};Tx={...};一样吗? 最佳答案 它们并不完全相同。也许这可以通过一个反例来说明:structFoo{explicitFoo(std::initializer_list){}};intmain(){Foof0{1,2,3};//OKFoof1={1,2,3};//ERROR}因此,第二个变体要求类型可以从初始化列表隐式构造,而第一个版本则不需要。请注意,这同样适用于Foo(int,int,int)形式的构造函数。.我选择了initializer_list随便举个例

c++ - ={} 和 {} 风格的初始化在 C++11 中是否相同?

C++11引入了{}样式的初始化。但是这两种形式吗Tx{...};Tx={...};一样吗? 最佳答案 它们并不完全相同。也许这可以通过一个反例来说明:structFoo{explicitFoo(std::initializer_list){}};intmain(){Foof0{1,2,3};//OKFoof1={1,2,3};//ERROR}因此,第二个变体要求类型可以从初始化列表隐式构造,而第一个版本则不需要。请注意,这同样适用于Foo(int,int,int)形式的构造函数。.我选择了initializer_list随便举个例

c++ - 错误 : invalid initialization of reference of type 'int&' from expression of type 'const int'

这是一个与thisquestion中的代码无关的问题。,关于以下模板函数。templateclassObject:publicContainer{public:T&object;Object(constT&obj):object(obj){}};这是调用构造函数的代码:templatevoidArray::add_element(constT&element){vec.push_back(newObject(element));}这段代码编译得很好,但是只要我在main中添加一行调用它:Arrayarray;inti=3;array.add_element(i);我收到编译器警告:er

c++ - 错误 : invalid initialization of reference of type 'int&' from expression of type 'const int'

这是一个与thisquestion中的代码无关的问题。,关于以下模板函数。templateclassObject:publicContainer{public:T&object;Object(constT&obj):object(obj){}};这是调用构造函数的代码:templatevoidArray::add_element(constT&element){vec.push_back(newObject(element));}这段代码编译得很好,但是只要我在main中添加一行调用它:Arrayarray;inti=3;array.add_element(i);我收到编译器警告:er

c++ - 无法将 {...} 从 <brace-enclosed initializer list> 转换为 struct

我以前使用过TDM-GCC-5.10,现在切换回4.9MINGW-GCC,尝试使用列表初始化时遇到了奇怪的错误:classVector2{public:Vector2(floatx,floaty){this->x=x;this->y=y;}floatx=0.f;floaty=0.f;};structTest{intx=0;Vector2v;};intmain(){Testtst={0,Vector2(0.0f,0.0f)};//Errorreturn0;}错误:main.cpp:Infunction'intmain()':main.cpp:21:41:error:couldnotcon

c++ - 无法将 {...} 从 <brace-enclosed initializer list> 转换为 struct

我以前使用过TDM-GCC-5.10,现在切换回4.9MINGW-GCC,尝试使用列表初始化时遇到了奇怪的错误:classVector2{public:Vector2(floatx,floaty){this->x=x;this->y=y;}floatx=0.f;floaty=0.f;};structTest{intx=0;Vector2v;};intmain(){Testtst={0,Vector2(0.0f,0.0f)};//Errorreturn0;}错误:main.cpp:Infunction'intmain()':main.cpp:21:41:error:couldnotcon

c++ - 处理 C++ "initialized but not referenced"警告以销毁作用域助手?

在VisualStudio中,我经常将对象仅用于RAII目的。例如:ScopeGuardclose_guard=MakeGuard(&close_file,file);close_guard的全部目的是确保文件将在函数退出时关闭,它不会在其他任何地方使用。但是,VisualStudio给我一个警告,提示“局部变量已初始化但未引用”。我想针对这种特定情况关闭此警告。你如何处理这种情况?VisualStudio认为这个对象没有用,但这是错误的,因为它有一个非平凡的析构函数。我不想为此使用#pragma警告指令,因为即使出于正当理由它也会关闭此警告。 最佳答案