小编Ste*_*nov的帖子

将值类型捕获到lambda时是否执行复制?

struct SomeStruct
{
    public int Num { get; set; }
}

class Program
{
    static Action action;

    static void Foo()
    {
        SomeStruct someStruct = new SomeStruct { Num = 5 };
        action = () => Console.WriteLine(someStruct.Num);
    }

    static void Main()
    {
        Foo();
        action.Invoke();
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 是否在创建lambda时创建了someStruct的副本?
  2. 是Foo返回时创建的someStruct的副本?
  3. 我可以验证没有发生复制吗?在C++中,我将实现复制构造函数并从其中进行打印.

该标准的引文将不胜感激.任何相关的在线文章也是如此.

.net c# struct value-type

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

如何处理返回结构的不变性?

我正在写一个拥有巨大2D"细胞"阵列的游戏.一个单元只需3个字节.我还有一个名为CellMap的类,它包含2D数组作为私有字段,并通过公共索引器提供对它的访问.

Profiling showed that a performance problem is caused by garbage collection of too many Cell objects. So I decided to make Cell a struct (it was a class).

But now code like this doesn't work:

cellMap[x, y].Population++;
Run Code Online (Sandbox Code Playgroud)

I can think of many options, but I don't really like any of them.

  1. Make the array public, and write cellMap.Data[x, y].Population = 5;
  2. Stop using a CellMap class, and just use a 2D array directly. But CellMap is very …

.net c# language-features struct immutability

8
推荐指数
3
解决办法
472
查看次数

"此XmlReader不支持ReadElementContentAsBase64方法"

using System.IO;
using System.Runtime.Serialization;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

namespace XmlTest
{
    class TestClass : IXmlSerializable
    {
        public XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(XmlReader reader)
        {
            var data = new byte[3];
            reader.ReadStartElement();
            reader.ReadElementContentAsBase64(data, 0, data.Length);
        }

        public void WriteXml(XmlWriter writer)
        {
            var data = new byte[] { 1, 2, 3 };
            writer.WriteBase64(data, 0, data.Length);
        }

        public static void Main()
        {
            var serializer = new DataContractSerializer(typeof(TestClass));

            var stringWriter = new StringWriter();
            using (var writer = XmlWriter.Create(stringWriter))
            { …
Run Code Online (Sandbox Code Playgroud)

.net serialization datacontractserializer ixmlserializable

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

如何恢复默认的VS工具栏配置?

如何恢复默认的VS工具栏配置?

那个,我的意思是:

  • 已启用工具栏的设置和位置
  • 每个工具栏上的项目的设置和顺序

我知道如何重置给定工具栏上的项目的设置和顺序,所以如果我知道哪些是默认启用的工具栏(及其位置),那么我将能够逐个启用和重置它们.

我不想重置所有VS设置.

ide visual-studio defaults uidefaults visual-studio-2015

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

无法从大括号括起来的初始化列表转换为std :: vector

我看到了很多类似的问题,但我认为我没有看到相同的问题.这很基础.我的讲师的一些代码无法编译,我将问题提炼到这个测试用例:

void foo(vector<int> v) {
}

void fooUsage() {
    foo({0, 1, 2});
}
Run Code Online (Sandbox Code Playgroud)

这失败了:

could not convert '{0, 1, 2}' from '<brace-enclosed initializer list>' to 'std::vector<int>

注意:它适用于GCC 5.0.0 20141228但在我的GCC 4.7.1(tdm-1)上失败.

对不起,如果这太基础但我不太了解C++ 11.

c++ gcc c++11

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

在QML中解析JSON

相关的Qt doc应该是这个.但它没有提到QML.然而,在网上的许多地方,我发现JSON.parse了QML JS中的函数的使用.有这样的功能,我该如何使用它?

我只是想要一个文档的链接,但这被认为是偏离主题的.

javascript qt parsing json qml

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

dotTrace Performance Profiler对[垃圾收集]的意义是什么?

[垃圾收集]在这张照片中意味着什么?和"20个电话"的事情?

我的意思是,我怎么能弄清楚为什么GC花了这么长时间?它收集了很多小物件吗?一个大的?关于如何优化这一点的任何提示?

有问题的代码是:

private void DeserializeFrom(SerializationInfo info)
{
    Width = info.GetInt32("width");
    Height = info.GetInt32("height");
    var data = (List<byte>)info.GetValue("cells", typeof(List<byte>));
    cells = new Cell[physicalSize.Width, physicalSize.Height];
    int pos = 0;
    for (int x = 0; x < physicalSize.Width; x++)
    {
        for (int y = 0; y < physicalSize.Height; y++)
        {
            cells[x, y] = new Cell();
            if (x < Width && y < Height)
            {
                cells[x, y].HasCar = data[pos];
                pos++;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

没什么太花哨的.我怀疑罪魁祸首是大List<byte>对象,但我认为收集一个单一的大对象应该是即时的(而不是收集一堆小对象).

.net optimization garbage-collection dottrace

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

为什么[NonSerialized]不能处理自动实现的属性?

[Serializable]
class MyClass
{
    [NonSerialized] int Foo { get; set; } // error
    [NonSerialized] int bar; // ok
}
Run Code Online (Sandbox Code Playgroud)

为什么不允许这样做?

我知道诸如此类的解决方法

  • 实现ISerializable
  • 切换到XmlSerializer/XmlIgnore
  • 切换到手动实现的属性

问题是具体为什么 [NonSerialized]不允许在本地使用,但允许在字段上使用.

.net serialization .net-3.5 nonserializedattribute

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

Qt Creator不会自动隐藏/显示调试窗格

我在Qt Creator调试器中启动了我的应用程序,然后关闭了应用程序.调试窗格没有自动隐藏.然后我等了一下状态栏说"调试器完成了".但即便如此,他们并没有自动隐藏.

我的窗口看起来像这样:

截图

也许这是一个缺失的功能,我需要自己关闭它们?有任何想法吗?

编辑:现在我看到即使手动关闭它们也不是一个完整的解决方案,因为:

  • 即使当我关闭3个窗格时,仍然存在一些东西:水平暗条(左侧部分显示"调试器")
  • 当我重新启动调试器时,3个调试窗格不会自动显示.

嗯,这一切让我觉得我做的事情从根本上说是错误的......这是我要问的基本内容.

debugging user-interface panes qt-creator

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

Qt中`:/ foo`,`qrc:/ foo`和`qrc:/// foo`路径之间的区别

此代码成功:

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
Run Code Online (Sandbox Code Playgroud)

此代码显示“失败”:

QFile file("qrc:/main.qml");
if ( file.open(QIODevice::ReadOnly) ) {
    cout << "success" << endl;
} else {
    cout << "failure" << endl;
}
Run Code Online (Sandbox Code Playgroud)

将QFile构造函数参数更改为qrc:///main.qml(如Qt文档中)不能解决该问题。更改它以:/main.qml使其打印“成功”。

所以我对于何时使用这三种形式感到困惑。

c++ url resources qt path

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