小编use*_*715的帖子

c ++字符串文字仍然令人困惑

我一直在阅读一些关于Unicode的文章,并意识到我仍然对这件事做些什么感到困惑.

作为Windows平台上的c ++程序员,给予我的学科与任何教师大致相同:始终使用Unicode字符集; 如果可能的话,将其模板化或使用TCHAR; 喜欢wchar_t,std :: wstring over char,std :: string.

#include <tchar.h>
#include <string>
typedef std::basic_string<TCHAR> tstring;
 // ...
static const char* const s_hello = "??"; // bad
static const wchar_t* const s_wchar_hello = L"??" // better
static LPCTSTR s_tchar_hello = TEXT("??") // even better
static const tstring s_tstring_hello( TEXT("??") ); // best
Run Code Online (Sandbox Code Playgroud)

不知怎的,我搞砸了,我引导自己相信如果我说"某事",那就意味着它是ASCII格式的,如果我说L"某事"就是Unicode.然后我读到了这个:

类型wchar_t是一种不同的类型,其值可以表示支持的语言环境(22.3.1)中指定的最大扩展字符集的所有成员的不同代码.类型wchar_t应具有与其他整数类型之一相同的大小,符号和对齐要求(3.11),称为其基础类型.类型char16_t和char32_t分别表示与uint_least16_t和uint_least32_t相同的大小,符号和对齐的不同类型,称为基础类型.

所以呢?如果我的语言环境从代码页949开始,那么wchar_t的扩展是从949 + 2 ^(sizeof(wchar_t)*8)?它说话的方式听起来像'我不在乎你的c ++实现是使用UTF编码还是什么'.

至少,我可以理解一切都取决于应用程序所在的语言环境.因此我测试了:

#define TEST_OSTREAM_PRINT(x) \
std::cout << "----" << std::endl; \
std::cout << "cout : " << x << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ unicode

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

LNK4006,LNK4221在使用包含另一个静态库的静态库时发出警告

我正在尝试使用包含其他静态库的静态库.

有两个项目:Engine,MyGame

'Engine'将生成Engine.lib

'MyGame'将在链接时使用Engine.lib.

以下是我从visual studio 2012获得的构建消息:

1>------ Rebuild All started: Project: Engine, Configuration: Debug Win32 ------
2>------ Rebuild All started: Project: MyGame, Configuration: Debug Win32 ------
1>  Precompiled.cpp
2>  Main.cpp
2>LINK : fatal error LNK1104: cannot open file 'D:\klee\Engine\Debug\Engine.lib'
1>  RenderGame.cpp
1>  RenderDebug.cpp
1>  MsgHandler.cpp
1>  Main.cpp
1>  Log.cpp
1>  Input.cpp
1>  Interface.cpp
1>  Helper.cpp
1>  GameObject.cpp
1>  Framework.cpp
1>  Engine.cpp
1>  Config.cpp
1>  Component.cpp
1>  Generating Code...
1>  Guicon.cpp
1>glu32.lib(GLU32.dll) : warning LNK4006: __NULL_IMPORT_DESCRIPTOR already defined in glew32.lib(glew32.dll); …
Run Code Online (Sandbox Code Playgroud)

c++ dll linker static-libraries visual-studio-2012

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

set vs unordered_set vs sorted vector

我开始想知道set/unordered_set/sorted vector之间的确切性能差异是什么.

因此,编写测试代码是为了比较它们的处理时间,以便我可以证明以下语句我相信: - 矢量是线性搜索中最好的 - 由于散列,Unordered_set最适合搜索

#include <string>
#include <set>
#include <unordered_set>
#include <vector>
#include <iostream>
#include <iomanip>
#include <algorithm>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>


void PrintSep(const std::string& title = "")
{
    unsigned half = (78 - title.size()) / 2;
    std::cout << std::string(half, '-') << ' ' << title << ' ' << std::string(half, '-') << std::endl;
} // PrintSep

void PrintTable( const char** names, double* times, unsigned count, unsigned colspan = 20)
{
    std::cout << std::setw(colspan) << "type" << …
Run Code Online (Sandbox Code Playgroud)

c++ performance-testing

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

为什么OpenGL在创建/释放资源时会获取指向资源ID的指针?

我想知道为什么OpenGL会将指针指向资源ID,因为我正在做这样的事情:

#include "OglResource.h"
#include <iostream>

void WINAPI DeleteVertexArray( GLuint item )
{
    glDeleteVertexArrays(1, &item);
}
OglResource MakeOglResource( GLenum type )
{
    switch( type )
    {
    case GL_VERTEX_SHADER:
        return OglResource(glCreateShader(GL_VERTEX_SHADER), (OglResource::ReleaseFunc)glDeleteShader, GL_VERTEX_SHADER);
        break;
    case GL_FRAGMENT_SHADER:
        return OglResource(glCreateShader(GL_FRAGMENT_SHADER), (OglResource::ReleaseFunc)glDeleteShader, GL_FRAGMENT_SHADER);
        break;
    case GL_VERTEX_ARRAY:
        {
            GLuint out = OglResource::INVALID_OGL_RESOURCE_ID;
            glGenVertexArrays(1, &out);
            return OglResource(out, DeleteVertexArray, GL_VERTEX_ARRAY);
        }
        break;
    }

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

如果传递给OpenGL的资源ID的地址确实很重要,这很危险,因为只要MakeOglResource函数返回,我传递给OpenGL(&out)的位置就无效.

我对此进行了测试,看起来并没有让应用程序崩溃,但我很担心.

  1. 为什么OpenGL要我在CreateVertexArrays/DeleteVertexArrays时传递地址?
  2. 这段代码对你来说安全吗?

下面是OglResource的实现:

#ifndef _HANDLE_H
#define _HANDLE_H

#include <memory>
#include <functional>

#define CALL_CONVENTION WINAPI
template <typename HANDLE_TYPE>
class Handle
{ …
Run Code Online (Sandbox Code Playgroud)

c++ opengl

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