这两个字符)"在下面的示例中终止原始字符串文字.
序列)"可能会在某些时候出现在我的文本中,即使在其中找到此序列,我也希望字符串继续.
R"(
Some Text)"
)"; // ^^
Run Code Online (Sandbox Code Playgroud)
如何)"在字符串文字中包含序列而不终止它?
我只是想问一下这个错误是什么意思以及如何解决这个问题谢谢!
错误:'sort'不是'std'的成员
vector<int> result;
for (auto & i : numbers)
result.push_back(std::stoi(i));
std::sort(result.begin(), result.end());
Run Code Online (Sandbox Code Playgroud) 我已经安装了Code :: Blocks for Windows,并希望编译C++ 14代码,如通用lambdas,但我从codeblocks.org安装的Code :: Blocks的二进制版本不支持该标志-std=c++14.
如何更新编译器并启用-std=c++14Code :: Blocks的标志?
问:
为什么定义内置型的未初始化的对象内的函数体已经明确的值,而内置类型定义的对象之外的任何功能被初始化为0或''?
举个例子:
#include <iostream>
using std::cout; using std::endl;
int ia[10]; /* ia has global scope */
int main()
{
int ia2[10]; /* ia2 has block scope */
for (const auto& i : ia)
cout << i << " "; /* Result: 0 0 0 0 0 0 0 0 0 0 */
cout << endl;
for (const auto& i : ia2)
cout << i << " "; /* Result: 1972896424 2686716 …Run Code Online (Sandbox Code Playgroud) 我养成了使用直接列表初始化编写代码的习惯,因为它更有效,并且防止隐式缩小非常有用:
int i {0};
string s {""};
char c {'a'};
bool b {false};
auto num {100}; // But this??
Run Code Online (Sandbox Code Playgroud)
但是当谈到自动说明符时,我听说它被认为是坏的或者不喜欢这样写它,为什么呢?
这个lambda失败了因为我没有捕获变量:
int main()
{
int val = 5;
auto lambda = []{ return val; }; // error: val wasn't captured.
lambda();
}
Run Code Online (Sandbox Code Playgroud)
但是为什么ostream cout工作虽然它没有被捕获?
int main()
{
auto lambda = []{ cout << endl; }; // works
}
Run Code Online (Sandbox Code Playgroud) 我听说您应该更喜欢编写内部包含守卫而不是外部包含守卫。
我在互联网上搜索过,但没有找到答案。
这是 Herb & Andrei 所著的 C++ Coding Standards 一书的片段,其中显示了“外部包含保护”:
避免使用旧书中提倡的过时的外部包含保护:
#ifndef FOO_HJNCLUDED_ //NOT recommended
#include "foo.h"
#define FOO_HJNCLUDED_
#endif
Run Code Online (Sandbox Code Playgroud)
现在,这导致了以下问题:
问:
什么是内部包含保护,什么是外部包含保护?两者之间有什么区别,为什么首选内部包含守卫?
我希望答案也提供了一个例子。
编辑:我最终回答了我自己的问题。
我很难概念化c ++集,实际上是一般的.
这些是什么?它们有用吗?
这对我来说是一个很奇怪的错误.检查以下代码:
void test(void){
vector<string> v;
v.push_back("hello");
auto fn=[=](){
v.push_back("world");
};
}
Run Code Online (Sandbox Code Playgroud)
第一个push_back方法传递了编译但第二个失败了,产生了错误:
错误:没有匹配的成员函数来调用'push_back'
编译器说明是:
**注意:(687,36)候选函数不可行:'this'参数的类型为'const vector'(又名'const vector,allocator >>')
但该方法没有标记const**.
好吧,我没有使用任何const参数,我无法弄清楚编译器试图告诉我什么.有人能帮助我吗?
我有以下代码。
#include <iostream>
struct Box {
Box() { std::cout << "constructed at " << this << '\n'; }
Box(Box const&) { puts("copy"); }
Box(Box &&) = delete;
~Box() { std::cout << "destructed at " << this << '\n'; }
};
auto f() {
Box v;
return v; // is it eligible for NVRO?
}
int main() {
auto v = f();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码产生错误。 call to deleted constructor/function in both gcc and clang
但是,如果我更改代码以返回纯右值,则代码有效。
auto f() {
Box v;
return Box(); …Run Code Online (Sandbox Code Playgroud) c++ ×10
c++11 ×5
c++14 ×2
lambda ×2
auto ×1
c++17 ×1
c++20 ×1
codeblocks ×1
copy-elision ×1
header-files ×1
scope ×1
set ×1