问题标签 [c++-standard-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std::forward_list 成员可以实现为静态的吗?
std::forward_list
提供insert_after
和erase_after
可能不需要实际访问std::forward_list
对象的成员。因此,它们可以实现为static
成员函数,并且可以在没有列表对象的情况下调用——这对于想要从列表中删除自身的对象很有用,这是一种非常常见的用途。编辑:此优化仅适用于forward_list
专业化std::allocator
或用户定义的无状态分配器。
符合标准的实现可以做到这一点吗?
§17.6.5.5/3 说
对 C++ 标准库中描述的成员函数签名的调用表现得好像实现声明没有其他成员函数签名一样。
带脚注
一个有效的 C++ 程序总是调用预期的库成员函数,或具有等效行为的函数。实现还可以定义其他成员函数,否则这些成员函数不会被有效的 C++ 程序调用。
我不清楚添加是否static
会创建一个“不同的”成员函数,但是删除(隐式)参数不应该破坏添加默认参数不会破坏的任何内容,这是合法的。(您不能合法地将 PTMF 带入任何标准成员函数。)
我觉得应该允许图书馆这样做,但我不确定是否会违反某些规则。列出的成员函数原型有多规范?
visual-studio-2010 - 错误 LNK2019:未解析的外部符号“toString(int)”
环境:Windows XP。Visual Studios 2010。语言 - C++。
我遇到了以下链接错误并且已经没有如何解决这个问题的想法。我有一个项目(CnD 设备),它链接到我的团队控制的 2 个项目(消息和碳)。我试图在 3 个项目之间搜索项目属性
我相信这个问题是因为我没有链接到标准 C++ 库中的字符串。我一遍又一遍地扫描我的属性列表。以下是我认为对这个问题至关重要的一些属性。
CnD 设备属性信息:
- 配置类型动态库.dll
- 使用MFC 在共享 DLL 中使用 MFC
- 使用 ALT不使用 ALT
- 字符集使用多字节字符集
- 运行时库多线程 DLL (/MD)
- 附加依赖项 msvcprtd.lib、Carbon.lib、BUFFER_API.lib、BUFFER_FRAMEWORK.lib、Messages.lib
- 忽略所有默认库否
消息属性信息:
- 配置类型静态库 (.lib)
- 使用MFC 在共享 DLL 中使用 MFC
- 使用 ALT不使用 ALT
- 字符集使用 Unicode 字符集
- 运行时库多线程 DLL (/MD)
- 附加依赖项
- 链接库依赖否
碳属性信息:
- 配置类型静态库 (.lib)
- 使用MFC 在共享 DLL 中使用 MFC
- 使用 ALT不使用 ALT
- 字符集使用 Unicode 字符集
- 运行时库多线程 DLL (/MD)
- 链接库依赖否
我的 CnD 链接输出是:
c++ - 涉及 std::vector 等的前向声明
我经常使用前向声明;它们有助于避免许多#include
s,缩短编译时间等等。但是如果我想在标准库中前向声明一个类怎么办?
我听说 forward-declare 是禁止/不可能的std::vector
。现在这个对一个不相关问题的回答建议用这种方式重写我的代码:
东西.h
东西.cpp
现在,如果我在整个项目中使用VectorOfNumbers
而不是std::vector<int>
在所有上下文中使用,一切都会好起来的,我不再需要#include <vector>
在我的头文件中!
这种技术有很大的缺点吗?能够提前申报的收益能否vector
超过它们?
c++ - std::lexical_cast - 有这样的事情吗?
C++ 标准库是否定义了这个函数,还是我必须求助于 Boost?
我在网上搜索,除了 Boost 什么都找不到,但我想我最好在这里问一下。
c++ - C++ 标准库中的参数类型
我注意到一些标准库函数使用 void* 作为参数,例如memcpy
函数,它的原型是:
也有以char*为参数的read
函数,例如class的函数ifstream
,其原型为:
为什么标准库不统一这些参数,比如全部使用char* 或者全部使用void*。有什么特别的原因吗?
程
c++ - 为什么 C++ 将此视为模棱两可的函数引用
为什么我的编译器会将以下 GetLength 函数指针视为模棱两可
的伪代码:
GetInfo 仅允许双重返回 + ITEM* 参数模式。那么为什么要考虑(而不是丢弃)GetLength 的两个基于字符串的变体?
c++ - 为什么 VS2008 std::string.erase() 移动它的缓冲区?
我想逐行读取文件并捕获一个特定的输入行。为了获得最佳性能,我可以通过读取整个文件并使用指针迭代其内容以低级别的方式执行此操作,但是此代码对性能不是至关重要的,因此我希望使用更具可读性和类型安全的标准库样式实现。
所以我所拥有的是:
虽然这不是性能关键代码,但我在解析操作之前调用了 line.reserve(1024) 以防止在读入较大的行时对字符串进行多次重新分配。
在 std::getline 中,字符串在将每一行的字符添加到它之前被擦除。我单步执行了这段代码,以使自己确信内存没有在每次迭代中重新分配,我发现这让我大吃一惊。
在 string::erase 的深处,而不是仅仅将其大小变量重置为零,它实际上正在做的是调用 memmove_s 并使用指针值来覆盖缓冲区的已使用部分,而缓冲区的未使用部分紧随其后,除了 memmove_s 正在以零计数参数调用,即请求移动零字节。
问题:
为什么我希望在我可爱的循环中间产生一个库函数调用的开销,尤其是一个被调用根本不做任何事情的循环?
我自己还没有把它拆开,但是在什么情况下这个调用实际上不会做任何事情,但实际上会开始移动大块缓冲区?
它为什么要这样做呢?
奖励问题:C++ 标准库标签是什么?
c++ - 将对象插入到 ostreams
我想将类实例的文本描述放到 ostream 上,如
我知道如何声明一个 ostream 插入器;
我希望能够将不同级别的细节放到 ostream 中。如果我可以定义两个或多个 ostream 插入器,或者向插入器传递一个额外的参数,或者向插入器传递一个方法,或者调用一个返回字符串流的方法,我就可以做到这一点(我可以这样做吗?)
有没有人解决过这个问题?
c++ - 如何搜索和打印字符串中的特定部分?
我主要是从 C++ 库中寻找一个标准函数,它可以帮助我在字符串中搜索一个字符,然后从找到的字符开始打印出字符串的其余部分。我有以下情况:
在此先感谢您的帮助。如果您能帮我完成代码,我将不胜感激。
c++ - 如何在运行时确定矢量大小?
在运行时,可以确定 a 的大小vector
吗?
例如
input : 25 // 显示向量大小