相关疑难解决方法(0)

g_s(mingw)说to_string不是std的成员

我正在制作一个小词汇记忆程序,其中的单词将随机闪现在我的意思中.我想使用标准的C++库,就像Bjarne Stroustroup告诉我们的那样,但我遇到了一个看似奇怪的问题.

我想将long整数更改std::string为能够将其存储在文件中.我也受雇于to_string()此.问题是,当我使用g ++(版本4.7.0,如其--version标志中所述)编译它时,它说:

PS C:\Users\Anurag\SkyDrive\College\Programs> g++ -std=c++0x ttd.cpp
ttd.cpp: In function 'int main()':
ttd.cpp:11:2: error: 'to_string' is not a member of 'std'
Run Code Online (Sandbox Code Playgroud)

我的程序给出了这个错误:

#include <string>

int main()
{
    std::to_string(0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,我知道它不可能是因为msdn库清楚地说它存在并且早先关于Stack Overflow的问题(对于g ++版本4.5)说它可以用-std=c++0x旗标打开.我究竟做错了什么?

c++ mingw g++ tostring c++11

241
推荐指数
6
解决办法
35万
查看次数

istringstream,ostringstream和stringstream有什么区别?/为什么不在每种情况下使用stringstream?

当我会用std::istringstream,std::ostringstream以及std::stringstream为什么不应该我只是用std::stringstream在所有情况(是否有任何的运行时性能问题?).

最后,这有什么不好的(而不是使用流):

std::string stHehe("Hello ");

stHehe += "stackoverflow.com";
stHehe += "!";
Run Code Online (Sandbox Code Playgroud)

c++ string stringstream ostringstream istringstream

150
推荐指数
4
解决办法
6万
查看次数

用于将整数转换为字符串C++的itoa()的替代方案?

我想知道是否存在itoa()将整数转换为字符串的替代方法,因为当我在visual Studio中运行它时会收到警告,当我尝试在Linux下构建程序时,我收到编译错误.

c++ integer stdstring itoa

140
推荐指数
10
解决办法
28万
查看次数

将int转换为std :: string

将int转换为字符串的最短路径是什么,最好是内联的?使用stl和boost的答案将受到欢迎.

c++ string int

131
推荐指数
7
解决办法
22万
查看次数

C++性能挑战:整数到std :: string的转换

任何人都可以击败我的整数到std :: string代码的性能,链接如下?

已经有几个问题可以解释如何将整数转换为std::stringC++中的整数,例如这个,但是所提供的解决方案都没有效率.

以下是一些可用于竞争的常用方法的编译就绪代码:

流行的看法相反,boost::lexical_cast有自己的实现(白皮书)并且不使用stringstream和数字插入运算符.我真的希望看到它的性能比较,因为另一个问题表明它很悲惨.

我自己的贡献,在桌面计算机上具有竞争力,并演示了一种在嵌入式系统上全速运行的方法,与依赖整数模数的算法不同:

如果您想使用该代码,我将根据简化的BSD许可证提供(允许商业使用,需要归属).请问.

最后,该功能ltoa是非标准的,但可广泛使用.

  • ltoa版本,适用于拥有提供它的编译器的任何人(ideone没有):http://ideone.com/T5Wim

我很快就会发布我的性能测量结果.

算法规则

  • 提供将至少32位有符号和无符号整数转换为十进制的代码.
  • 产生输出作为std::string.
  • 没有与线程和信号不兼容的技巧(例如,静态缓冲区).
  • 您可以假设ASCII字符集.
  • 确保INT_MIN在绝对值无法表示的二进制补码机上测试代码.
  • 理想情况下,输出应为字符的字符与规范的C++版本使用相同的stringstream,http://ideone.com/jh3Sa,但任何事情,这显然是理解的,因为正确的号码也是OK.
  • :虽然你可以使用你想要进行比较的任何编译器和优化器选项(除了完全禁用),但代码还需要编译并在至少VC++ 2010和g ++下给出正确的结果.

希望讨论

除了更好的算法,我还想在几个不同的平台和编译器上获得一些基准测试(让我们使用MB/s吞吐量作为我们的标准测量单位).我相信我的算法代码(我知道sprintf基准测试需要一些快捷方式 - 现在已经修复)是标准的明确定义的行为,至少在ASCII假设下,但是如果你看到任何未定义的行为或输出的输出无效,请指出.

结论:

不同的算法对g ++和VC2010执行,可能是由于std::string每个算法的实现不同.VC2010显然在NRVO方面做得更好,摆脱了价值回报只对gcc有帮助.

发现代码的性能优于sprintf一个数量级. ostringstream落后50倍甚至更多.

挑战的胜利者是user434507,他在gcc上生成的代码运行速度是我自己的350%.由于SO社区的突发奇想,其他条目将被关闭.

目前(最终?)速度冠军是:

  • 对于gcc:user434507,速度比sprintf …

c++ string performance integer

118
推荐指数
6
解决办法
4万
查看次数

临时的一生

以下代码工作正常,但为什么这是正确的代码?为什么foo()返回的临时的"c_str()"指针有效?我想,当输入bar()时,这个临时性已经被破坏了 - 但它似乎不是这样的.那么,现在我假设foo()返回的临时值将在调用bar()之后被销毁 - 这是正确的吗?为什么?

std::string foo() {
  std::string out = something...;
  return out;
}

void bar( const char* ccp ) {
  // do something with the string..
}

bar( foo().c_str() );
Run Code Online (Sandbox Code Playgroud)

c++ temporary c++-faq lifetime full-expression

37
推荐指数
2
解决办法
3149
查看次数

C++将简单值转换为字符串

现在我用下面的一段代码dummily转换基本类型(int,long,char[],这种东西),以std::string进行进一步的处理:

template<class T>
constexpr std::string stringify(const T& t)
{
    std::stringstream ss;
    ss << t;
    return ss.str();
}
Run Code Online (Sandbox Code Playgroud)

但是我不喜欢它依赖的事实std::stringstream.我尝试使用std::to_string(来自C++ 11的保留节目)然而它会扼杀char[]变量.

有一种简单的方法可以为这个问题提供优雅的解决方案吗?

c++ stringstream string-conversion c++11

22
推荐指数
4
解决办法
4864
查看次数

itoa功能问题

我正在使用我的C++项目中的Ubuntu环境中的Eclipse.

我使用该itoa函数(在Visual Studio上完美运行),编译器抱怨itoa未声明.

我包括<stdio.h>,<stdlib.h>,<iostream>这于事无补.

c++ portability itoa

10
推荐指数
3
解决办法
2万
查看次数

在C++中是否可以指定使用哪个删除操作符?

我正在检测一些代码,并注意到有了C++ 14的功能,有两个新的delete运算符(来自http://en.cppreference.com/w/cpp/memory/new/operator_delete):

这些是5-6)如果提供了用户定义的替换,则调用而不是(1-2),除了它的实现定义在删除不完整类型和数组的对象时是否调用(1-2)或(5-6)非类和易破坏的类类型(自C++ 17以来).标准库实现与(1-2)相同.

我已经超载了这些并且想要专门调用这两个.当我用gcc重载这两个时,我没有问题.使用clang ++我得到一个未定义的引用operator delete(void*)

这是代码

void* operator new(long unsigned int howMuch) {
    return reinterpret_cast<void*>(0xdeadbeef);
}

void* operator new[](long unsigned int howMuch) {
    return reinterpret_cast<void*>(0xdeadbeef);
}

void operator delete(void* what, long unsigned int howmuch) {
        if(what != reinterpret_cast<void*>(0xdeadbeef)) __builtin_trap();
        if(howmuch != 1) __builtin_trap();
}

extern "C"
void _start() {
    delete new char;
    asm("syscall" : : "a"(60) : ); 
}
Run Code Online (Sandbox Code Playgroud)

用gcc编译:g++ -ggdb -std=c++14 -nostdlib -fno-builtin -fno-exceptions 1.cc没有问题,运行正常.

用llvm/clang可以做到这一点吗?

c++ clang++ c++14

7
推荐指数
1
解决办法
468
查看次数

如何将字符串转换为 uint32_t

我有一个程序,它逐行读取文件的内容,将每一行存储到字符串向量中,然后打印向量的内容。

\n\n

将文件数据读入字符串向量后,我尝试将每一行stringuint32. 文件的每一行都由32-bit数字组成。输入数据文件的示例(input_file.dat)

\n\n
31401402\n67662718\n74620743\n54690001\n14530874\n13263047\n84662943\n09732679\n13839873\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想将这些字符串中的每一个转换为uint32_t, 对于我编写的另一个程序,该程序将这些数字转换为 ASCII 格式(该程序需要用于uint32_t转换)。

\n\n

到目前为止我的计划:

\n\n
#include <iostream>\n#include <fstream>\n#include <string>\n#include <vector>\n\n/*\n * Program to iterate through all lines in file and put them in given vector\n *\n */\nbool getFileContent(std::string fileName, std::vector<std::string> & vecOfStrs)\n{\n\n    // Open the File\n    std::ifstream in(fileName.c_str());\n\n    // Check if object is valid\n    if(!in)\n    {\n        std::cerr << "Cannot open the File : "<<fileName<<std::endl;\n        return false;\n    }\n\n    std::string …
Run Code Online (Sandbox Code Playgroud)

c++ io types casting file-read

7
推荐指数
1
解决办法
4万
查看次数