我正在制作一个小词汇记忆程序,其中的单词将随机闪现在我的意思中.我想使用标准的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旗标打开.我究竟做错了什么?
当我会用std::istringstream,std::ostringstream以及std::stringstream为什么不应该我只是用std::stringstream在所有情况(是否有任何的运行时性能问题?).
最后,这有什么不好的(而不是使用流):
std::string stHehe("Hello ");
stHehe += "stackoverflow.com";
stHehe += "!";
Run Code Online (Sandbox Code Playgroud) 我想知道是否存在itoa()将整数转换为字符串的替代方法,因为当我在visual Studio中运行它时会收到警告,当我尝试在Linux下构建程序时,我收到编译错误.
将int转换为字符串的最短路径是什么,最好是内联的?使用stl和boost的答案将受到欢迎.
任何人都可以击败我的整数到std :: string代码的性能,链接如下?
已经有几个问题可以解释如何将整数转换为std::stringC++中的整数,例如这个,但是所提供的解决方案都没有效率.
以下是一些可用于竞争的常用方法的编译就绪代码:
与流行的看法相反,boost::lexical_cast有自己的实现(白皮书)并且不使用stringstream和数字插入运算符.我真的希望看到它的性能比较,因为另一个问题表明它很悲惨.
我自己的贡献,在桌面计算机上具有竞争力,并演示了一种在嵌入式系统上全速运行的方法,与依赖整数模数的算法不同:
如果您想使用该代码,我将根据简化的BSD许可证提供(允许商业使用,需要归属).请问.
最后,该功能ltoa是非标准的,但可广泛使用.
我很快就会发布我的性能测量结果.
std::string.INT_MIN在绝对值无法表示的二进制补码机上测试代码.stringstream,http://ideone.com/jh3Sa,但任何事情,这显然是理解的,因为正确的号码也是OK.除了更好的算法,我还想在几个不同的平台和编译器上获得一些基准测试(让我们使用MB/s吞吐量作为我们的标准测量单位).我相信我的算法代码(我知道sprintf基准测试需要一些快捷方式 - 现在已经修复)是标准的明确定义的行为,至少在ASCII假设下,但是如果你看到任何未定义的行为或输出的输出无效,请指出.
不同的算法对g ++和VC2010执行,可能是由于std::string每个算法的实现不同.VC2010显然在NRVO方面做得更好,摆脱了价值回报只对gcc有帮助.
发现代码的性能优于sprintf一个数量级.  ostringstream落后50倍甚至更多.
挑战的胜利者是user434507,他在gcc上生成的代码运行速度是我自己的350%.由于SO社区的突发奇想,其他条目将被关闭.
目前(最终?)速度冠军是:
sprintf …以下代码工作正常,但为什么这是正确的代码?为什么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) 现在我用下面的一段代码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++项目中的Ubuntu环境中的Eclipse.
我使用该itoa函数(在Visual Studio上完美运行),编译器抱怨itoa未声明.
我包括<stdio.h>,<stdlib.h>,<iostream>这于事无补.
我正在检测一些代码,并注意到有了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可以做到这一点吗?
我有一个程序,它逐行读取文件的内容,将每一行存储到字符串向量中,然后打印向量的内容。
\n\n将文件数据读入字符串向量后,我尝试将每一行string从uint32. 文件的每一行都由32-bit数字组成。输入数据文件的示例(input_file.dat):
31401402\n67662718\n74620743\n54690001\n14530874\n13263047\n84662943\n09732679\n13839873\nRun Code Online (Sandbox Code Playgroud)\n\n我想将这些字符串中的每一个转换为uint32_t, 对于我编写的另一个程序,该程序将这些数字转换为 ASCII 格式(该程序需要用于uint32_t转换)。
到目前为止我的计划:
\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)