标签: g++4.9

没有用于调用'regex_search(...)'的匹配函数

给定一个旧式const char *指针和一个长度,有没有办法调用std::regex_search()它而不先将缓冲区的内容复制到std::string?这是我遇到的问题的一个简单示例:

#include <regex>

int main()
{
    const char *text = "123 foobar 456";
    const size_t len = strlen(text);

    const std::regex rx(" (.+)bar");

    std::smatch what;
    std::regex_search( text, text+len, what, rx); // <- problematic line

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为第五个带有两个迭代器的std :: regex_search()是我需要的,但是我还没有完全理解如何将指针转换为迭代器.当我尝试编译上面的代码时,我得到了这个:

g++ -std=c++11 test.cpp
test.cpp:11:45: error: no matching function for call to ‘regex_search(const char*&, const char*, std::smatch&, const regex&)’
/usr/include/c++/4.9/bits/regex.h:2131:5: note: template<class _Bi_iter, class _Alloc, class _Ch_type, class _Rx_traits> bool …
Run Code Online (Sandbox Code Playgroud)

c++ regex c++11 g++4.9

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

用于GNU/G ++ 4.9的C++ 11中的string_char_traits <char>(早于2.95.3)

我有一些遗留的C++代码(用于使用GNU g ++ 2.95.3进行编译)具有以下声明 std::basic_string<char,string_char_traits<char>,malloc_alloc> x; 头文件是

#include <std/bastring.h>
Run Code Online (Sandbox Code Playgroud)

现在,我迁移到GU G ++ 4.9在那里我得到这个错误:1,std/bastring.h未发现2.当我改变的#include <std/bastring.h>因为#include <string>,我发现了以下错误:

error: 'string_char_traits' was not declared in this scope
std::basic_string<char,string_char_traits<char>,malloc_alloc> x;
error: template argument 2 is invalid
std::basic_string<char,string_char_traits<char>,malloc_alloc> x;
error: expected unqualified-id before ',' token
std::basic_string<char,string_char_traits<char>,malloc_alloc> x;
                                              ^
Run Code Online (Sandbox Code Playgroud)

在GNU g ++ 4.9下需要指导/帮助才能使这个可编辑

c++ string g++ c++11 g++4.9

5
推荐指数
1
解决办法
195
查看次数

在CDT项目中使用其他C ++编译器的正确方法是什么?

我在Linux上使用Eclipse CDT Mars.2(和Neon RC)。我的发行版的默认C ++编译器是GCC 5.3.1,但是对于我的某些工作,我使用GCC 4.9.3。我希望有关项目的所有内容都可以使用GCC 4.9.3:工具发现,C ++标准库,包含文件路径,索引器,预处理-全部。

什么是正确的方法?看来Eclipse具有相当拜占庭式的“提供者”和“工具链”配置,我不想进行设置,以后将无法撤消...

注意: 我确实尝试在某些Previous Includes等提供程序设置中替换${COMMAND}/usr/bin/g++-4.9,这确实导致发现了4.9.3相关的包含文件,但我的索引器并不喜欢这种方式,也不喜欢所有的std :: stuff显示为红色且未解决。然后,我尝试寻找在哪里设置用于索引的编译器版本,但找不到。

c++ eclipse-cdt version-compatibility eclipse-mars g++4.9

5
推荐指数
1
解决办法
572
查看次数

从const字符串到bool的隐式转换

我有以下代码:

#include <iostream>
#include <string>

void foo(bool a)
{
        std::cout << "bool" << std::endl;
}

void foo(long long int a)
{
        std::cout << "long long int" << std::endl;
}

void foo(const std::string& a)
{
        std::cout << "string" << std::endl;
}

int main(int argc, char* args[])
{
        foo("1");
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

执行时我得到这个输出:

bool
Run Code Online (Sandbox Code Playgroud)

我原以为输出:

string
Run Code Online (Sandbox Code Playgroud)

为什么g ++ 4.9隐式将此字符串转换为bool?

c++ g++ g++4.9

5
推荐指数
1
解决办法
1320
查看次数

在Mint 17.2上安装g ++ 4.9

我正在尝试安装g ++ 4.9或更高版本,以便在Android上构建mapbox.说明指出我需要g ++ 4.9或更高版本.我找到了以下说明,但它们不起作用.

sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get install g++-4.9
Run Code Online (Sandbox Code Playgroud)

最后一个命令说:

~ $ sudo apt-get install g++-4.9
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package g++-4.9 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'g++-4.9' has no installation candidate
Run Code Online (Sandbox Code Playgroud)

我也尝试从Synaptic Package Manager获得以下内容:

g++:
  Depends: cpp (>=4:4.9-1ubuntu7) but 4:4.8.2-1ubuntu6 is …
Run Code Online (Sandbox Code Playgroud)

c++ linux gcc install g++4.9

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

如何修复此数组用作初始值设定项错误?

保存.cpp

#include "save.h"
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
Save::Save()
{
}
Run Code Online (Sandbox Code Playgroud)

我已经注释了所有函数并从 Save::Save 中删除了内容,但它不会影响错误。
保存.h

#ifndef SAVE_H
#define SAVE_H
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
class Save
{
    public:
        Save();
        void vDisplay();
        char cDecode();
        bool bFileExists(const string& crsFileName);
        const char ccTab = 9;
        const char ccHelp[5] = "help";
        const char ccNo[3] = "no";
        const char ccStart[6] = "start";
        const char ccQuit[5] = "quit";
        const char ccYes[4] = "yes";
};
#endif // SAVE_H
Run Code Online (Sandbox Code Playgroud)

我使用 …

c++ error-handling g++ g++4.9

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

在代码中本地化g ++编译选项

我正在寻找一种简单的方法来将某些g ++(g ++ - 4.9特定的)编译选项本地化到某些代码行或至少是目标函数.我感兴趣一般来说,还特意到-fast-math,-ffinite-math-only-fno-signed-zeros选项.

我认为可以使用make实用程序在*.cpp文件级别进行本地化,但我希望有一种方法可以在代码本身中通过#pragma或__attribute__等来启用它.我想这样做不仅可以最大限度地减少对外部文件的依赖性(即不正确的风险makefile),而且还希望将某些FP行为超本地化为函数内的特定方程.

或者,如果不能通过内联指令本地化FP行为,如果在项目构建中未启用所需的编译器指令(例如makefile丢失或不适当地修改),我该怎么做才能至少触发编译时错误.

我认为这种内联优化可能是编译器特定的,在这种情况下是g ++,但这是我愿意采取的妥协.

pragma compiler-directives compiler-optimization c++11 g++4.9

2
推荐指数
1
解决办法
403
查看次数

unordered_map 中的桶计数

在下面给出的示例程序中(来源:http ://www.cplusplus.com/reference/unordered_map/unordered_map/rehash/ )

// unordered_map::rehash
#include <iostream>
#include <string>
#include <unordered_map>

int main ()
{
  std::unordered_map<std::string,std::string> mymap;

  mymap.rehash(20);

  mymap["house"] = "maison";
  mymap["apple"] = "pomme";
  mymap["tree"] = "arbre";
  mymap["book"] = "livre";
  mymap["door"] = "porte";
  mymap["grapefruit"] = "pamplemousse";

  std::cout << "current bucket_count: " << mymap.bucket_count() << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出变为:

current bucket_count: 23
Run Code Online (Sandbox Code Playgroud)

为什么桶数变成23?对堆大小有什么影响?堆分配什么时候完成?在存储桶重新散列上还是在实际插入上?动态释放何时完成?何时clear()使用或erase()两者都使用?

c++ unordered-map heap-memory dynamic-allocation g++4.9

2
推荐指数
1
解决办法
6794
查看次数

GCC中的C++ 14支持是实验性的

CCC 14支持GCC页面引用

重要提示:由于最终的ISO C++ 14标准最近才发布,因此GCC的支持是实验性的.不会尝试保持与不反映最终标准的C++ 14功能的实现的向后兼容性.

我找不到官方GCC的定义experimental.它是否仅适用于非标准功能的向后兼容性,如最后一句所述?或者它是否也表明稳定性或缺乏稳定性?在同一页上的早期句子说

C++ 14特性可作为GCC Subversion存储库主干和GCC 4.8及更高版本中"主线"GCC编译器的一部分提供.

对我而言,这表明稳定性.是这样的吗?特别是,我的问题是关于GCC 4.9,因为这是最早的版本,完全支持C++ 14,根据前面提到的页面.

c++ gcc g++ c++14 g++4.9

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

删除了未使用的类

我有以下代码:

namespace rm {
  namespace lib {
    class Object {
    public:
      Object() {printf("Hi\n");}
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我想用g++ -Wall -Wno-unused -Werror -fPIC -g -Iinclude/ -c -O0 -o object.o object.cpp和编译一个共享库g++ --shared -o librm.so object.o.编译工作没有问题,但在检查结果库后nm librm.so | c++filt,rm::lib::Object::Object()无处可寻.即使启用-Wextra,GCC也不会发出警告.

G ++版本是(Raspbian 4.9.2-10)4.9.2

c++ gcc g++4.9

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

用户定义的用于g ++编译的C++文件扩展

出于某种原因,我想使用扩展.cxy来用作c ++源代码.比如,文件名是abc.cxy.但是,我的g++(4.9.2版本)无法编译.我正在编译为:

g++ -o abc.oxy abc.cxy
Run Code Online (Sandbox Code Playgroud)

它抱怨为:g++: warning: conn.cxy: linker input file unused because linking not done 并且,目标文件abc.oxy没有被制作.然而,如果我有扩展名.cxx,并编译为:

g++ -o abc.oxy abc.cxx
Run Code Online (Sandbox Code Playgroud)

它正在制作abc.oxy 我不允许使用除以外的扩展名.c, .cpp, .cxx吗?

c++ c++11 g++4.9

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

为什么g ++ 4.9.0默认有std :: isnan?

我的理解是该功能std::isnan仅从C++ 11开始提供.此外,除非特别说明,否则g++使用-std=gnu++98.

那为什么这会编译?

>> cat test.cpp
#include <cmath>
int main(int argc, char** argv)
{
    return std::isnan(0);
}

>> g++ test.cpp
Run Code Online (Sandbox Code Playgroud)

是否有一个标志来取出该功能<cmath>

c++ g++ c++11 g++4.9

0
推荐指数
1
解决办法
248
查看次数

如何写一行和没有'?:'的嵌套'if'语句(可能吗?)

是否可以在使用表达式的情况下编写一行if-else语句(即只使用一行;)?例如以下形式: ?:if (p == 1) " " else "\n";

潜在目的可能是: cout << if (p == 1) " " else "\n";

只是好奇这是否可能,不知道是否有任何实际的应用程序.

谢谢

c++ c++11 g++4.9

-8
推荐指数
2
解决办法
3712
查看次数