小编Jas*_*son的帖子

构建时间:Visual Studio 2015-2017构建非常慢

对于我的小型(5-6000行代码)C++程序,我使用了VS 2015和2017,我的构建时间在第一次构建时大约是2分钟.这显然非常慢,但我不确定为什么.在tools-> options-> projects and solutions-> build and run中 - 我已经将"最大并行项目构建数"设置为8但没有发生变化.

是否有任何其他设置或一般规则可用于缩短构建时间?

c++ msbuild build build-time visual-studio

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

c ++指针算术和类

所以我刚刚开始学习指针算法,我正在摆弄它的一些功能.一旦我开始尝试使用指针算法和类,我就遇到了问题.我在下面编写了以下代码:

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;


class Cat
{
public:
    Cat();
    ~Cat();
    int GetAge() { return itsAge; }
    void SetAge(int age) { itsAge = age; }

private:
    int itsAge;

};

Cat::Cat()
{
}

Cat::~Cat()
{
}

int _tmain(int argc, _TCHAR* argv[])
{

    Cat *Family = new Cat[5];
    Family = Family + 1;
    Family->SetAge(3);
    cout << Family[1].GetAge()<< endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我看来,我正在创建一个名为Family的指针,它将指向一个Cat对象数组.该指针将表示Family [0]的地址.然后,在下一行,我通过向指针本身添加1来指向系列指向新地址(因此编译器应该将此作为将地址槽向上移动到数组中的下一个元素,Family [1]).然后我将年龄设置为3并尝试输出家庭[1]的年龄值,但我得到的答案是-842150451而不是3.我缺少什么?

c++ pointers

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

你通常在c ++中声明和定义类外的函数?

我现在一直在研究C++,并希望开始进入实际的应用程序/软件开发.问题是我很难弄清楚如何准确设置项目的一些更实际的方面.我今天的问题是,如果我有一个没有在标准类结构中声明和定义的函数,我应该在哪个,或者最常见的是,声明和定义它?您观看的大多数教程将在main.cpp中声明一个函数,在main()之上,然后在main()下面定义它,但我认为这仅用于教学目的而不是真实世界的应用程序.你应该像创建类一样创建函数头文件和源文件吗?

c++ function header-files

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

在C++中是在对象创建之前或之后调用的构造函数吗?

我找到了关于java的这个问题的一些答案,但没有特别关于c ++.所以我在Java中读到了首先创建对象,然后调用构造函数.我想知道这是否与c ++相同?此外,如果是这种情况,那么拥有默认构造函数有什么意义呢?是继承目的吗?

c++ constructor

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

对C++的动态内存分配的确切含义有点困惑

我听说过有关动态的确切含义的冲突事件,以及自动内存分配.我听说堆栈被称为自动内存分配和动态内存分配.我可以看到两者都是在程序执行之前确定堆栈内存块大小,因此它的最大大小在运行时不会增长.但是,在程序执行期间,当函数数据被推入和弹出堆栈时,堆栈会不断增长和缩小.

那么在这个意义上是不是这种动态内存分配?

如果它是不是混淆只是将堆称为动态?

有人可以帮我澄清一下吗?

编辑:在撰写本文时,我似乎混淆了一些我不知道的概念.堆栈和堆内存管理的低级concpets与C++中相同内容的高级概念之间存在差异.有关此问题的澄清,请参阅下面我接受的答案.

c++ memory stack memory-management

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

创建新的openGL版本的过程?

在阅读了这本在线书籍http://learnopengl.com/book/offline%20learnopengl.pdf之后,我脑子里开始出现一些关于如何创建更新版本的openGL的问题.根据在线阅读,显卡制造商负责创建更新版本的openGL.所以说Nvidia开发(假设)一个带有openGL版本4.3的GTX 700系列显卡.在此之后,他们决定开发900系列显卡,并对openGL的实现进行一些优化.在卡完成并进行优化后,他们将openGL的这些新优化标记为openGL 4.4.我的示例在新版本的创建方面是否正确?另外,如果是这样,那么kronos组(openGL的开发人员)实际上做了什么?他们是否有责任确保新版本的openGL符合所需规格?

opengl 3d graphics nvidia video-card

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

如何在c ++中检查无效/未初始化的对象

目前,我已经创建了一个简单的错误处理系统,通过检查nullptr来检查指针是否有效:

        inline void ErrReport(const char8* fileOfError, int32 lineNumberOfError, const Blz::string c_errMessage)
        {
            ErrorContext::LogContext();
            LOG("  ERROR: %s\n", c_errMessage.c_str());
            LOG("  In %s: %i\n\n", fileOfError, lineNumberOfError);
            exit(0);
        }

        #if(_DEBUG)
            #define ERRASSERT(test, msg) do {if (!(test)) Blz::Err::ErrReport(__FILE__, __LINE__, msg);} while (0)
        #endif
Run Code Online (Sandbox Code Playgroud)

然后,我可以在我的代码中调用ERRASSERT,如下所示:

unsgined char* imageData = LoadImage("PathToImage");
ERRASSERT(imageData, "Image did not load properly");
Run Code Online (Sandbox Code Playgroud)

现在,为了与非指针对象做类似的事情,我有一个Check()函数来查看对象是否已经初始化:

        template<typename T> inline bool Check(boost::outcome::expected<T>& obj)
        {
            if (obj)
                return true;
            else
                return false;
        }
Run Code Online (Sandbox Code Playgroud)

使用此代码,如果我理解如何正确使用outcome :: expected,那么我只需在我的ERRASSERT中调用上面的函数,一切都应该同样工作

boost::outcome::expected<ObjectType> obj = functionReturnsObj(); 
ERRASSERT(Check(obj), "Object not initialized!);
Run Code Online (Sandbox Code Playgroud)

我的问题:

是否有更好的方法来检查对象是否初始化而不必将所有内容都包装在boost :: …

c++ error-handling initialization

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

C#引用类型与引用类型成员

所以我对C#很新,我得到的引用类型是存储对内存中某个对象的引用的类型(通常在堆上).我的问题是,如果我有一个类将其他类作为其成员变量,那些类成员变量是否也存储引用?我问,因为很多时候你只希望你的类成员变量与他们拥有的对象的生命周期联系在一起,让这些成员变量存储对内存中其他地方的对象的引用是没有意义的.在查找这些变量的值时,这只会增加不必要的间接性.现在我知道解决这个问题的一种方法是制作那些成员变量结构,但是如果这些成员变量需要继承或其他只有类的功能呢?任何见解都表示赞赏.

c# reference-type composition

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

在Visual Studio 2017中使用c ++ 17'结构化绑定'功能

我正在尝试在我的代码中使用一些c ++ 17功能,例如结构化绑定,但编译器一直给我错误,我不确定是不是因为我做错了或者我没有设置c + +17适合在VS17中工作.我正在尝试编译的简单代码是:

#include <iostream>

struct S
{
    int i = 0;
    float f = 32.0f;
};

int main()
{
    S s;

    auto [i, f] = s();

    std::cin.get();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

从理解这个文章,这是我会怎么用新的C++语法17返回多个值.但是,我一直收到这些错误:

c:\users\jason\documents\visual studio 2017\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(16): error C2059: syntax error: 'empty declaration'
1>c:\users\jason\documents\visual studio 2017\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(16): error C2143: syntax error: missing ';' before '['
1>c:\users\jason\documents\visual studio 2017\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(16): warning C4467: usage of ATL attributes is deprecated
1>c:\users\jason\documents\visual studio 2017\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(16): error C2337: 'i': attribute not found
1>c:\users\jason\documents\visual studio 2017\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(16): error …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio c++17

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