小编xml*_*lmx的帖子

C++ 17是否支持更简单的基于范围的For循环?

从C++ 11开始,我们可以写:

vector<int> v{1, 2, 3, 4};
for (auto x : v)
{
    cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)

根据Essentials of Modern C++ Style,以下代码很快在C++中也是合法的:

vector<int> v{1, 2, 3, 4};
for (x : v)
{
    cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)

这个功能是否可以在C++ 17或C++ 20中使用?

c++ standards c++11

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

如何轻松使std :: cout线程安全?

我有一个多线程应用程序,它大量std::cout用于日志记录而没有任何锁定.在这种情况下,如何轻松添加锁机制以使std::cout线程安全?

我不想搜索每次出现std::cout并添加一行锁定代码.这太乏味了.

有更好的做法吗?

c++ logging multithreading iostream locking

27
推荐指数
7
解决办法
2万
查看次数

为什么"extern const int n;" 不按预期工作?

我的项目只包含两个源文件:

a.cpp:

const int n = 8;
Run Code Online (Sandbox Code Playgroud)

b.cpp:

extern const int n;

int main()
{
    // error LNK2001: unresolved external symbol "int const n" (?n@@3HB)
    int m = n; 
}
Run Code Online (Sandbox Code Playgroud)

我知道有几种方法可以使它工作; 但是,我只是想知道为什么它不起作用?

c++ const declaration extern

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

将局部变量声明为rvalue-reference是无用的,例如T && r = move(v)?

你能否在某些情况下给我一个说明性的例子来证明以下陈述是有用和必要的?

AnyTypeMovable   v;
AnyTypeMovable&& r = move(v);
Run Code Online (Sandbox Code Playgroud)

c++ scope rvalue-reference move-semantics c++11

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

为什么braced-init-list不能用于三元运算符?

我的编译器是最新的VC++ 2013 RC.

int f(bool b)
{
    return {}; // OK
    return b ?  1  : { }; // C2059: syntax error : '{'
    return b ?  1  : {0}; // C2059: syntax error : '{'
    return b ? {1} : {0}; // C2059: syntax error : '{'
}
Run Code Online (Sandbox Code Playgroud)

为什么braced-init-list不能用于三元运算符?

这种行为是否被C++标准定义为不正确,或仅仅是VC++编译器的错误?

c++ initialization ternary-operator visual-c++ c++11

26
推荐指数
2
解决办法
1440
查看次数

删除的构造函数必须是私有的吗?

class A
{
public:
    A() = default;
    A(const A&) = delete;
};

class A
{
public:
    A() = default;

private:
    A(const A&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

在任何情况下,这两个定义是否始终相同?

c++ standards constructor access-rights c++11

25
推荐指数
2
解决办法
3363
查看次数

std :: is_integer和std :: is_integral之间的区别?

C++ 11提供了两种类型的特征模板类:std::is_integerstd::is_integral.但是,我不能说出它们之间的区别.

什么类型,比如T,可以成std::is_integer<T>::value真并做出std::is_integral<T>::value错误?

c++ type-traits language-lawyer c++11

24
推荐指数
3
解决办法
5626
查看次数

为什么`std :: exit`不会按预期触发析构函数?

#include <cstdlib>
#include <thread>
#include <chrono>
#include <iostream>

using namespace std;
using namespace std::literals;

struct A
{
    int n_ = 0;
    A(int n) : n_(n) { cout << "A:" << n_ << endl; }
    ~A() { cout << "~A:" << n_ << endl; }
};

A a1(1);

int main()
{
    std::thread([]()
    {
        static A a2(2);
        thread_local A a3(3);
        std::this_thread::sleep_for(24h);
    }).detach();

    static A a4(4);
    thread_local A a5(5);

    std::this_thread::sleep_for(1s);
    std::exit(0);
}
Run Code Online (Sandbox Code Playgroud)

我的编译器是clang 5.0-std=c++1z.

输出如下:

A:1
A:2
A:4
A:5 …
Run Code Online (Sandbox Code Playgroud)

c++ destructor global-variables thread-local-storage c++11

24
推荐指数
2
解决办法
2687
查看次数

当:: operator new足够时,为什么需要:: operator new []?

众所周知,C++标准定义了两种形式的全局分配函数:

void* operator new(size_t);
void* operator new[](size_t);
Run Code Online (Sandbox Code Playgroud)

而且,C++标准草案(18.6.1.2 n3797)说:

227)运算符new或operator delete不直接负责注意数组的重复次数或元素大小.这些操作在数组new和delete表达式的其他位置执行.但是,数组新表达式可以将operator参数增加到operator new以获得存储补充信息的空间.

让我困惑的是:

如果我们void* operator new[](size_t);从标准中删除,而只是使用该void* operator new(size_t)怎么办?定义冗余全局分配函数的基本原理是什么?

c++ standards memory-management overloading new-operator

23
推荐指数
3
解决办法
1784
查看次数

如何跟踪给定主题的较新C++ std文档?

以下是C++ std文档.文件号是N3721,取代了旧的N3634.

在此输入图像描述

显然,跟踪给定主题的旧文档很容易.

但是,我的问题是:

如何跟踪给定主题的新文档?

例如,如果N3721被新文档取代,如何跟踪新文档?

c++ standards language-design c++11

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