小编dev*_*bmw的帖子

C/C++使用int或unsigned int

在很多代码示例,源代码,库等中.我看到使用int时,就我所知,unsigned int更有意义.

我看到很多的地方是for循环.见下面的例子:

for(int i = 0; i < length; i++)
{
    // Do Stuff
}
Run Code Online (Sandbox Code Playgroud)

为什么你会使用一个int而不是一个unsigned int?这只是懒惰 - 人们不会打字打扰unsigned吗?

c c++ int unsigned types

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

使用stb_image为OpenGL纹理加载PNG会产生错误的颜色

我正在使用stb_image加载一个32位的PNG文件(RGBA),我用它创建一个OpenGL纹理.

它适用于24位PNG文件(没有alpha通道),但是当我使用32位PNG文件时,出现问题.

这就是纹理应该是这样的:

质地

这就是使用OpenGL渲染时的样子(黑色部分是透明的,当我启用混合时):

错误的纹理

这是我加载纹理的方式:

int w;
int h;
int comp;
unsigned char* image = stbi_load(filename.c_str(), &w, &h, &comp, STBI_rgb);

if(image == nullptr)
    throw(std::string("Failed to load texture"));

glGenTextures(1, &m_texture);

glBindTexture(GL_TEXTURE_2D, m_texture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

if(comp == 3)
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
else if(comp == 4)
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);

glBindTexture(GL_TEXTURE_2D, 0);

stbi_image_free(image);
Run Code Online (Sandbox Code Playgroud)

这些是窗口参数(使用SDL)

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl png textures alpha

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

unordered_map,引用为值

使用值类型为引用C++ 11的unordered_map是否合法?

例如 std::unordered_map<std::string, MyClass&>

我已经设法使用VS2013进行编译但是我不确定它是否应该因为它导致一些奇怪的运行时错误.例如vector subscript out of range,在尝试erase元素时抛出.

一些谷歌搜索导致发现你不能有一个引用的向量,但我找不到任何有关unordered_map的内容.

更新

进一步的实验表明,vector subscript out of range它与引用的unordered_map无关,因为它是我的代码中的一个错误.

c++ stl unordered-map reference c++11

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

线程中没有处理C++异常

为什么unhandled exceptionVS 2013 没有例外,或者执行以下代码时引发的任何中止信号?

#include <thread>

void f1()
{
    throw(1);
}

int main(int argc, char* argv[])
{
    std::thread(f1);
}
Run Code Online (Sandbox Code Playgroud)

C++标准规定在以下情况下应调用std :: terminate:

when the exception handling mechanism cannot find a handler for a thrown exception (15.5.1)

in such cases, std::terminate() is called (15.5.2)

c++ exception visual-studio-2013

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

为什么product []返回1?

为什么productHaskell 中的函数返回1给它一个空列表?

haskell

6
推荐指数
3
解决办法
462
查看次数

HTTP - 多个预告标题

我试图在我的服务器中实现HTTP,并且无法找到有关如何处理多个拖车头字段(使用分块编码)的任何信息.

标准(http://tools.ietf.org/html/rfc2616#section-14.40)指出:"预告片一般字段值表示给定的标题字段集合存在于使用分块传输编码的消息的预告片中 -编码."

但是没有说明如何在此Trailer标头中指定多个标头.

例如,如果一个请求或响应有两个拖车头,Example1并且Example2,你将如何构建的Trailer头?

像这样:Trailer: Example1 Example2或者Trailer: Example1,Example2还是什么?

http rfc2616 chunked-encoding http-headers

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

basic_string 析构函数中的段错误

我有一个函数ModuleManager::tick(),代码如下:

void ModuleManager::tick()
{
auto now = std::chrono::steady_clock::now();
auto nowSys = std::chrono::system_clock::now().time_since_epoch();

for(auto& m : m_modules)
{
    if(std::chrono::duration_cast<std::chrono::seconds>(now - m.second) >=
        std::chrono::seconds(m.first.m_settings.m_interval))
    {
        std::string result = m.first.run(); //run() returns a std::string
        m.second = now;

        try
        {
            HTTPConn conn("127.0.0.1", 80);

            conn.request("POST", "/", std::vector<std::string>{"Host: localhost", "Connection: close"}, result);
        }
        catch(HTTPException& e)
        {
            Log::write(e.getErrorString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

程序从HTTPConn::request()函数返回时出现段错误,在 basic_string 析构函数中(已使用 GDB 确定这一点)。如果我将 request() 函数内的所有代码都注释掉,段错误仍然会发生,所以问题肯定在该函数之外。

我相信问题在于,在我的HTTPConn构造函数的某个地方,我破坏了堆。代码如下:

HTTPConn::HTTPConn(const std::string& host, int port)
{
addrinfo hints;
addrinfo* res;
memset(&hints, 0, …
Run Code Online (Sandbox Code Playgroud)

c++ g++ segmentation-fault

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

在哪里捕获异步代码中的异常?

Task task = AsyncMethod();

// do other stuff

await task;
Run Code Online (Sandbox Code Playgroud)

AsyncMethod()可以抛出异常。我是否将 try-catch 放在方法调用、await或两者周围?

c# exception try-catch async-await

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

为什么在没有填充或边距的情况下文本似乎有填充?

我有一个h1没有边距或填充,但h1.

在此处输入图片说明

是字体的原因还是其他原因?我试着设置margin-block-startmargin-block-end0,但什么都没有发生。

*, *::after, *::before {
	 margin: 0;
	 padding: 0;
	 box-sizing: inherit;
}

 html {
	 font-size: 10px;
	 box-sizing: border-box;
	 overflow-x: hidden;
}

h1 {
	 font-size: 3rem;
}

.accueil .container h1 {
	 font-family: 'Roboto', sans-serif;
	 font-weight: bold;
	 font-size: 4.5rem;
	 text-transform: uppercase;
}

.accueil .container h3 {
	 font-size: 2rem;
	 letter-spacing: 1px;
	 margin-bottom: 2rem;
}
Run Code Online (Sandbox Code Playgroud)
<div class='accueil'>
  <div class='container'>
    <h1>SOMETHING</h1>
    <h3>something else</h3>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

html css

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