小编Lau*_*kas的帖子

std :: reference_wrapper和简单指针之间的区别?

为什么需要std::reference_wrapper?应该在哪里使用?它与简单的指针有什么不同?它的性能与简单的指针相比如何?

c++ pointers reference c++11 reference-wrapper

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

基于范围的循环的BOOST_FOREACH和c ++ 11之间的区别?

  1. BOOST_FOREACH基于和c ++ 11范围的循环之间的主要区别是什么?
  2. 是否存在我想要使用的特定情况BOOST_FOREACH而不是基于范围的循环,反之亦然?

在执行了一个std::vector带有1,000,000个int变量的小测试之后,我发现它BOOST_FOREACH比基于范围的循环慢一点(比基于范围的循环花了大约1.25倍).

c++ foreach boost c++11

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

'final'说明符是否会增加任何开销?

final在一个class或一个上使用说明符function添加任何内存或CPU开销,还是仅在编译时使用?

如何std::is_final识别什么是最终的?

c++ c++11 c++14

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

两个源文件之间的变量(类和全局)

考虑使用一个由一个.cpp文件处理的变量,而其他.cpp文件将该变量的值用于各种目的.

与课程一起使用时

// header.h
class c {
public:
    static int f1();
    static int f2();
private:
    static int v;
};  

// first.cpp  
int c::v(0);

int c::f1() { return ++v; }  

// second.cpp
int c::f2() { return ++v; }  

// main.cpp
int main() {
    cout << c::f1() << endl;
    cout << c::f2() << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

1
2
Run Code Online (Sandbox Code Playgroud)

在全球范围内使用时

// header.h
int f1();  
int f2();  
static int v = 0;  

// first.cpp  
int f1() { return …
Run Code Online (Sandbox Code Playgroud)

c++

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

为什么Observer设计模式通常被描述为一对多?

虽然研究Observer pattern我注意到,该之间的连接SubjectObserver通常是一对多的.为什么这样?为什么多对多关系可能导致任何问题?

oop design-patterns software-design observer-pattern

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

为什么成员变量会发生变化,但对象的地址在这种情况下保持不变?

在下面的代码中,我有一个类的对象A.我使用值的值启动其公共成员变量0.然后我调用它ReplaceThis执行命令的方法*this = A();.然后我打印同一个对象的值和地址.该值始终是一些随机的乱码,而地址保持不变ReplaceThis.这让我感到困惑,因为未更改的地址表示对象没有在内存中移动,但是即使构造函数A为空,该值也会变为一些随机数据.

如果有人能够逐步解释这段代码中的内容,我将非常感激!

码:

#include <iostream>

class A
{
public:
    int Data;
    A() {}
    void ReplaceThis() { *this = A(); }
};

int main()
{
    A foo;
    foo.Data = 0;

    std::cout << "Initial  foo data: " << foo.Data << std::endl;
    std::cout << "Initial  foo address: " << &foo << std::endl;

    foo.ReplaceThis();

    std::cout << "Replaced foo data: " << foo.Data << std::endl;
    std::cout << "Replaced foo address: " …
Run Code Online (Sandbox Code Playgroud)

c++ constructor this

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

向所有 HTTP 客户端添加 HTTP 消息处理程序

我有一个名为 的 HTTP 消息处理程序AddHeadersHandler,它扩展了System.Net.Http.DelegatingHandler,我需要将它添加到所有当前和未来的HttpClient实例中,包括类型化、命名和非命名客户端。

我知道我可以.AddHttpMessageHandler<AddHeadersHandler>()为特定客户端添加一个处理程序,但是如何将它添加到所有客户端?

// AddHeadersHandler.cs
public class AddHeadersHandler: DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        request.Headers.TryAddWithoutValidation("X-Correlation-Id", Guid.NewGuid.ToString());

        return base.SendAsync(request, cancellationToken);
    }
}
Run Code Online (Sandbox Code Playgroud)
// Startup.cs
services
    .AddHttpContextAccessor()
    .AddTransient<AddHeadersHandler>();
services
    .AddHttpClient<MyClient>()
    .AddHttpMessageHandler<AddHeadersHandler>(); // I don't want to specify this for each client.
Run Code Online (Sandbox Code Playgroud)
// MyClient.cs
public class MyClient
{
    public HttpClient HttpClient { get; }

    public MyClient(HttpClient httpClient)
    {
        HttpClient = httpClient;
    }

    public async Task GetTest()
    {
        await HttpClient.GetAsync("https://localhost:5001/test"); …
Run Code Online (Sandbox Code Playgroud)

c# dotnet-httpclient .net-core asp.net-core

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

从另一个参数的值设置默认参数值

是否有可能实现这样的功能,如果没有指定,参数的值将默认为另一个参数的值?

例:

class Health
{
public:
    // If current is not specified, its value defaults to max's value
    Health(int max, int current = max) : max_(max), current_(current) { }
    int max_;
    int current_;
};
Run Code Online (Sandbox Code Playgroud)

就像现在一样,我收到编译错误:

error: 'max' was not declared in this scope
Health(int max, int current = max) : max_(max), current_(current) { }
                              ^
Run Code Online (Sandbox Code Playgroud)

c++ parameters

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

将指针保存到void指针指向的内存

考虑以下情况.

void * first指着一定量的记忆.我有另一个void * second指向别的东西.我想保存void * second在第一个指针所指向的内存中. 在此输入图像描述

我的方法:

*(void**) first = second;

这有效吗?是否有任何预防措施需要考虑?

c++ memory pointers void

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