c++11 相关问题

将此标记用于必须编译为C ++ 11的代码(不使用C ++ 14或更高版本中引入的任何功能)。

在Solaris 上从java 加载库时,libCrunG3.so.1 中的符号无法解析

我有一个小例子,其中使用 -std=c++11 构建的 c++ 库在从 java 程序加载时给出了未解析的符号。 cc和CC的版本是/opt/developerstudio12.6 java的版本...

回答 1 投票 0

C++11 auto、std::function 和对重载函数的不明确调用

我想知道是否有人知道为什么以下示例无法编译,给出对重载函数错误的模糊调用。如果我用强类型函子签名替换 auto,那么它就是......

回答 1 投票 0

c++11 中的可变参数模板和多重继承

我正在努力实现这样的目标: 我有一个模板化基类,我想动态继承它 模板 类 fooBase { 民众: fooBase(){}; 〜f...

回答 2 投票 0

以纳秒为单位存储时间戳c++

我的目标是存储纳秒范围内的时间戳。假设我有两台机器需要在任务完成的确切时间进行通信。 让我们只是为了问题......

回答 2 投票 0

为什么我不能在C++中声明这个双指针数组

void foo(){ 静态常量 int 树1[][2] = { {满,1}, {满,2}, {空,4}, {空,5}, {空,3} }; 静态常量...

回答 1 投票 0

C++原子compare_exchange_weak第二次成功,即使我没有改变预期?

当我使用这个功能时发生了一些让我难以理解的事情 代码: #包括 #包括 int main() { std::atomic_size_t 示例; size_t 期望 =...

回答 1 投票 0

当我没有将预期设置为匹配值时,C++ 原子compare_exchange_weak 会成功吗?

当我使用这个功能时发生了一些让我难以理解的事情 代码: #包括 #包括 int main() { std::atomic_size_t 示例; size_t 期望 =...

回答 1 投票 0

C++运算符重载性能问题

考虑以下方案。我们有3个文件: 主要.cpp: int main() { 时钟_t开始=时钟(); 整数a = 0; 对于 (int i = 0; i < 1000000000; ++i) { a += i; } clock_t e...

回答 3 投票 0

将 Lambda 传递给 pthread_create?

我在网上搜索了所有答案,但找不到任何解决方案。你能帮忙吗? 我的问题是我正在尝试将 Lambda 发送到另一个函数并使用 Pthread 库来运行 lambda ...

回答 2 投票 0

为什么std::条件拒绝T&?

我想如果模板参数为void则返回void,如果模板参数为T则返回T&。所以,我编写了下一个MRE代码: #包括 模板 结构体 Foo {

回答 1 投票 0

如何检查 c++11 std::regex_replace 是否成功?

我想做 C++11 相当于 Perl 检查替换操作: 我的$v =“foo.rat” 如果 ( $v =~ s/\.rat$/.csv/ ) { ... } 我可以毫不费力地进行更换: #包括 我想做 C++11 相当于 Perl 检查替换操作: my $v = "foo.rat" if ( $v =~ s/\.rat$/.csv/ ) { ... } 我可以轻松更换: #include <iostream> #include <string> #include <regex> int main() { std::string s{ "foo.rat" } ; std::regex reg{ R"((.*)\.rat$)" } ; s = std::regex_replace( s, reg, "$1.csv" ) ; std::cout << s << std::endl ; s = std::regex_replace( "foo.noo", reg, "$1.csv" ) ; std::cout << s << std::endl ; return 0 ; } 这给出: foo.csv foo.noo 请注意,对不匹配表达式的替换操作不会引发错误(这是我所期望的)。 查看 regex_replace 文档,我不清楚如何检查替换操作是否成功。 我可以进行字符串比较,但这似乎是倒退的? 尝试使用 std::regex_match 或 std::regex_search 查找匹配项,检查是否匹配,然后使用 std::string::replace 替换找到的字符串部分。这不应该导致性能损失。 只是添加到接受的答案,它也可以通过std::regex_iterator来完成。当可能发生多次更换时,这可能会很方便。 迭代器std::regex_iterator重复调用std::regex_search(),直到找到所有匹配项。如果迭代器开头的位置和结尾的位置相同,则未找到匹配项。 函数 bool regex_replace(std::string &str, const std::string &re, const std::string& replacement) 实现此行为: #include <iostream> #include <regex> bool regex_replace(std::string &str, const std::string &re, const std::string& replacement) { std::regex regexp(re); //Search regex std::sregex_iterator begin = std::sregex_iterator(str.begin(), str.end(), regexp); std::sregex_iterator end = std::sregex_iterator(); //replace using iterator for (std::sregex_iterator i = begin; i != end; ++i) str.replace(i->position(), i->length(), replacement); //returns true if at least one match was found and replaced return (begin != end); } 该功能运行到位。最后str有替换品。仅当进行任何替换时,该函数才会返回 true。 以下代码展示了如何使用它进行多次替换并检测是否进行了替换: int main(int argc, char** argv) { std::string rgx("[0-9]"); std::string str("0a1b2c3d4e5"); std::string replacement("?"); bool found = regex_replace(str, rgx, replacement); std::cout << "Found any: " << (found ? "true" : "false") << std::endl; std::cout << "string: " << str << std::endl; return 0; } 代码用每个数字替换引号“?”: Found any: true string: ?a?b?c?d?e? 使用 std::regex_constants::format_no_copy 标志来更改 regex_replace() 的行为。看下面的代码。 如果匹配失败,返回字符串现在将为空。 #include <iostream> #include <string> #include <regex> int main() { std::string s{ "foo.rat" } ; std::regex reg{ R"((.*)\.rat$)" } ; auto rxMatchFlag = std::regex_constants::format_no_copy; //<---use this to modify the behavior of regex_replace when matching failed. s = std::regex_replace( s, reg, "$1.csv", rxMatchFlag) ; if(!s.empty()) std::cout << s << std::endl ; else std::cout << "failed match" << std::endl; s = std::regex_replace( "foo.noo", reg, "$1.csv", rxMatchFlag) ; if(!s.empty()) std::cout << s << std::endl ; else std::cout << "failed match" << std::endl; return 0 ; } 对于其他标志,请查看这里 在检查与 std::match_results::format 的匹配后,使用 std::regex_match 进行替换: #include <iostream> #include <optional> #include <regex> #include <string> std::optional<std::string> match_and_replace(std::string_view in, const std::regex& reg, const std::string& replacement) { std::cmatch m; if (std::regex_match(in.begin(), in.end(), m, reg)) { return m.format(replacement); } return {}; } int main() { std::string s{"foo.rat"}; std::regex reg{R"((.*)\.rat$)"}; auto n = match_and_replace(s, reg, "$1.csv"); std::cout << (n ? *n : "<nullopt>") << std::endl; n = match_and_replace("foo.noo", reg, "$1.csv"); std::cout << (n ? *n : "<nullopt>") << std::endl; } 如果您想要 std::regex_replace 的确切行为(在我看来,您在示例中不需要这样做),请使用 std::regex_search 而不是 std::regex_match。 我不认为有任何直接的方法可以查明是否进行了任何替换。 (不要将其与“成功/不成功”混淆,这并不完全相同。)

回答 5 投票 0

在“C”中。组合数组和结构项

我正在尝试组合数组和结构,但仍然可以正常使用数组。 这是我尝试过的。他们的错误也随之而来。 int arryboard[10] = { 结构我的项目{ 炭...

回答 1 投票 0

在 C++ 中将值赋给 const 变量

所有, 考虑以下代码: 类 Foo { 民众: Foo(int osId, const std::wstring &desktop) { m_osId = osId; m_桌面 = m_桌面; } 私人的: 常量 int m_...

回答 1 投票 0

我目前使用的是什么c++规范? [重复]

最近我在编写的c++代码中遇到了编译错误,所以有人问我是否使用C++11编译器,但老实说我不知道如何检查我的编译器版本!所以知道如何解决...

回答 3 投票 0

C++ 仅展开部分参数包

前言 假设我有 N 个不同类型的参数(uint、int 和 float),并且每个参数都有自己的有效值范围(即从 2.5 到 20.0)。还考虑到一些参数是导出的...

回答 2 投票 0

C++11 允许在标识符中使用美元符号吗?

C++03 中的标识符中允许使用美元符号吗?涵盖了 C++03 中不允许在标识符中使用美元符号。 GCC 将其作为 C 扩展提供,并在 C++03 模式下正确给出诊断。哈...

回答 3 投票 0

将原子变量传递给函数

我试图将原子变量传递给函数,如下所示: // 函数factor接收一个原子变量 无效因子(std::atomic ThreadsCounter) { ………… } // 主要工作...

回答 1 投票 0

如何修复链接时丢失的 C++ 符号,例如 `对 `_ZTV8Settings' 的未定义引用`

链接器说: .pio/build/nano/src/canbus.cpp.o:(.literal._ZN7DalyBmsC5E6String[_ZN7DalyBmsC5E6String]+0x4):对“_ZTV8Settings”的未定义引用 对我来说,它抱怨全局设置参考...

回答 1 投票 0

尝试调整动态指针数组大小时出现分段错误

我一直在为我的大学课程学习一些C++,我有一个小但令人沮丧的练习要做。用户在终端中输入一些数字,它应该将它们添加到数组中,当数组...

回答 1 投票 0

C++14 constexpr 对 cppreference 的函数要求

cppreference 指出,直到 C++14,constexpr 函数必须满足以下要求: 函数体必须被删除或默认或仅包含以下内容: 空状态...

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.