草庐IT

copy-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++ - 如何 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++ - 错误 : 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++ - 节省内存的 C++ 字符串(interning、ropes、copy-on-write 等)

已结束。此问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。关闭6年前。Improvethisquestion我的应用程序存在内存问题,包括复制大量字符串、使用与大量哈希表中的键相同的字符串等。我正在为我的字符串寻找一个基类,以使其非常高效。我希望:字符串实习(相同值的多个字符串使用相同的内存),写时复制(我认为这在几乎所有std::string实现中都是免费的),带有绳索的东西将是一个奖励(对于O(1)-ish连接)。我的平台是Linux上的g++(但这不太重要

c++ - 节省内存的 C++ 字符串(interning、ropes、copy-on-write 等)

已结束。此问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。关闭6年前。Improvethisquestion我的应用程序存在内存问题,包括复制大量字符串、使用与大量哈希表中的键相同的字符串等。我正在为我的字符串寻找一个基类,以使其非常高效。我希望:字符串实习(相同值的多个字符串使用相同的内存),写时复制(我认为这在几乎所有std::string实现中都是免费的),带有绳索的东西将是一个奖励(对于O(1)-ish连接)。我的平台是Linux上的g++(但这不太重要

c++ - C 和 C++ 静态链接 : just a copy?

当有人静态链接一个.lib时,链接器会将lib的全部内容复制到最终的可执行文件中还是只复制目标文件中使用的函数? 最佳答案 整个图书馆?--没有。只是你调用的函数?--没有。还有别的吗?--是的。它肯定不会扔到整个库中。但它也不一定只包括“目标文件中使用的函数”。链接器将创建一个递归构建的列表,列出库中的哪些对象模块满足您的undefinedsymbol。然后,它将包含这些对象模块中的每一个。通常,一个给定的对象模块将包含多个函数,如果其中一些没有被您做调用的函数调用,您将获得一些函数(和数据对象))你不需要的。

c++ - C 和 C++ 静态链接 : just a copy?

当有人静态链接一个.lib时,链接器会将lib的全部内容复制到最终的可执行文件中还是只复制目标文件中使用的函数? 最佳答案 整个图书馆?--没有。只是你调用的函数?--没有。还有别的吗?--是的。它肯定不会扔到整个库中。但它也不一定只包括“目标文件中使用的函数”。链接器将创建一个递归构建的列表,列出库中的哪些对象模块满足您的undefinedsymbol。然后,它将包含这些对象模块中的每一个。通常,一个给定的对象模块将包含多个函数,如果其中一些没有被您做调用的函数调用,您将获得一些函数(和数据对象))你不需要的。