jjzjj

c++ - 为什么 std::basic_string 不支持通过表达式模板进行连接?

Qt的QString可以通过operator%连接起来,它使用表达式模板预先计算结果字符串的大小并优化对operator+的多个链式调用.参见thisquestionofmine了解更多信息。为什么std::basic_string没有采用类似的结构?C++11甚至允许这样做吗?我只看到优点,很明显,库实现者可以在需要时破坏ABI兼容性(C++11甚至为libstdc++提供了一个很好的理由)。 最佳答案 因为没有人提出标准;除非有人提出建议,否则它不会进入。还因为它可能会破坏现有代码(如果他们使用operator+就是这样)。此外

c++ - 为什么我不能从字符串复制初始化字符串流?

以下代码在GCC、Clang和VisualStudio中失败:#include#includeintmain(){std::strings="hello";//ok,copy-initializationstd::stringstreamss1(s);//ok,direct-initializationstd::stringstreamss2=s;//error}我认为直接初始化有效而复制初始化无效的唯一情况是构造函数是显式的,在这种情况下不是这样。怎么回事? 最佳答案 该构造函数是标记为显式的,因此只能与直接初始化一起使用。§27

c++ - 类模板继承在 GCC 中编译失败,但在 Visual Studio 中有效

有人能告诉我为什么以下代码在VisualStudio2010中完美运行,但在gcc5.3中无法编译,尽管它看起来没有任何问题?我已经进行了一些谷歌搜索,但没有找到描述模板类继承的清晰标准方法。#include#includenamespacefoobar{templateclassbasic_foo{public:inlinebasic_foo(){}virtual~basic_foo(){}typedefstd::basic_stringstr_foo;enum{fooEnum=100};};templateclassbasic_bar:privatebasic_foo{public

c++ - solaris (x86) 上std::basic_string 的一些疑惑

solaris(x86)上std::basic_string的一些困惑#include#includeintmain(){constwchar_t*s=L"abcdef";std::wstringws(s,s+6);for(inti=0;i运行结果为:9799101000为什么不是979899100101102代码#include#includeintmain(){constwchar_t*s=L"abcdef";std::wstringws;ws.resize(6);for(inti=0;i可以得到预期的结果。我使用gcc3.4.6,构建命令是g++-fshort-wcharstri

c++ - 错误 : no matching function for call to ‘to_string(std::basic_string<char>&)’

即使在模板中我可以有任何类型,函数to_string对基本字符串不起作用:例如:std::stringstr("mystring");my_class(str);用这个仿函数定义:templatevoidoperator()(valuetypevalue){...private_string_field=std::to_string(value);不起作用。这是错误:error:nomatchingfunctionforcallto‘to_string(std::basic_string&)’避免它的最佳方法是什么。事先,我要求避免仅仅因为一些常见的关键字就链接到不相关的问题。

c++ - 在 C++ 的编译时检查类型是否为 std::basic_string<T>

我在我的C++代码中定义了is_string:#includetemplatestructis_string{staticconstboolvalue=false;};templatestructis_string>{staticconstboolvalue=true;};intmain(){std::cout::value::value对于std::string和std::wstring都是如此。但我需要这样的谓词:is_string::value//tobetrueis_string::value//tobefalseis_string::value//tobefalseis_st

c++ - 如何使用类似 `std::basic_istream<std::byte>` 的东西

本题旨在使用std::byte具有标准输入输出。是否有任何计划为read(_bytes)添加适当的函数重载?和write(_bytes)到basic_istream的接口(interface)和basic_ostream在未来的标准?有什么理由反对它?我知道CharT*-应保留过载。我可以做什么来使用std::byte?我目前在我的项目功能中定义std::istream&read(std::istream&,std::byte*,std::streamsize)std::ostream&write(std::ostream&,conststd::byte*,std::streamsiz

c++ - std::basic_string 完全特化(g++ 冲突)

我正在尝试定义std::basic_string,allocator>的完全特化这是由定义的(在g++中)标题。问题是,如果我包含首先,g++将typedef视为basic_string的实例化并给我错误。如果我先进行特化,那么我就没有问题。我应该能够在之后定义我的特化已经包括了。我必须做什么才能做到这一点?我的代码:#include//#include//classbasic_string,allocator>{public:intblah(){return42;}size_tsize(){return0;}constchar*c_str(){return"";}voidreserv

c++ - 当你有一个 std::string 时如何使用 basic_istream

我有一个使用basic_istream作为参数的函数,我有一个std::string和我需要传递给它的数据。我该怎么做? 最佳答案 您可以将字符串数据放入流中:std::stringx;std::stringstreamss(x);//putstringintostreamfunction_taking_stream(ss); 关于c++-当你有一个std::string时如何使用basic_istream,我们在StackOverflow上找到一个类似的问题:

c++ - 为什么这个编译器错误? - 没有匹配函数调用 'std::basic_ofstream<char>::open(std::string&)'

这适用于VisualStudio,并且适用于一台计算机上的GCC4.9.2。但在不同的计算机上,我认为它是相同的GCC4.9.2编译器,但它给了我这个错误。我错过了什么吗?怎么回事?#include#include#includeusingnamespacestd;intmain(){stringfilename;filename="teststring";ofstreamfout;fout.open(filename);fout.||===Build:Debuginfileiotest(compiler:TDM32GNUGCCCompiler4.9.2dw2)===|F:\Users