路径与std::basic_strings
之间可以隐式转换,这使得可以将它们与over files API一起使用,例如作为std::ifstream::open
的参数
现在很容易看到到std::filesystem::path
的转换,因为它有一个接受std::string
类型的非显式构造函数。但是,我似乎找不到隐式地转到std::string
的方法。
有一个string
函数,但它是std::string string()常量;
,而不是操作符std::string()
。使用
#include <filesystem>
void foo(std::string) {}
int main()
{
namespace fs = std::filesystem;
fs::path p1;
foo(p1);
}
这段代码可以很好地编译icc、gcc和clang,但不能编译MSVS,在MSVS中会出现错误:
example.cpp
<source>(10): error C2664: 'void foo(std::string)': cannot convert argument 1 from 'std::filesystem::path' to 'std::string'
<source>(10): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Compiler returned: 2
那么,哪个编译器是对的呢?是否存在隐式转换序列,或者编译器只是有所帮助?
这里有一个到std::basic_string
的隐式转换,其中value_type
是操作系统相关的字符类型。
并且,(§30.10.8,在我的草稿中,n4659)
对于基于POSIX的操作系统,value_type是char
[...]
对于基于Windows的操作系统,value_type是wchar_t
[...]
要检查向量是否为空,我可以使用或。我查看了cplike上的签名,但缺乏理解它们的知识。它们如何相互关联?一个实现调用另一个实现吗? 我知道其中一个来自容器库,另一个来自迭代器库,但仅此而已。
问题内容: “隐式转换”和“显式转换”有什么区别?Java和C ++的区别是否不同? 问题答案: 显式转换是您使用某种语法 告诉 程序进行转换的地方。例如(在Java中): 隐式转换是在没有任何语法的情况下进行转换的地方。例如(在Java中): 应该注意的是(在Java中)涉及原始类型的转换通常涉及某种表示形式的更改,并且可能导致精度降低或信息丢失。相比之下,仅涉及引用类型的转换不会更改基本表示形
我在下面的某个地方看到了代码片段。 由于前面提到的代码片段工作得很好,它表明std::cout是从std::ostream派生而来的。但我还找不到任何直接的参考资料。 根据文件,其中说[强调我的]: 全局对象std::cout和std::wcout控制输出到实现定义类型的流缓冲区(源自std::stream buf),与标准C输出流stdout相关联。 上面的引文表示,控制输出到派生自std::s
下面的代码显示了我要做的:
并行开发挺复杂的,特别是在试图用好线程和锁的过程中。如果要用到条件变量或std-atomics(一种无锁开发方式),那就更复杂了。C++0x提供了future和promise来简化任务线程间的返回值操作;同时为启动任务线程提供了packaged_task以方便操作。其中的关键点是允许2个任务间使用无(显式)锁的方式进行值传递;标准库帮你高效的做好这些了。基本思路很简单:当一个任务需要向父线程(启动