小编Osk*_* N.的帖子

便携式分支预测提示

有没有可行的分支预测提示方法?请考虑以下示例:

  if (unlikely_condition) {
    /* ..A.. */
  } else {
    /* ..B.. */
  }
Run Code Online (Sandbox Code Playgroud)

这有什么不同于:

  if (!unlikely_condition) {
    /* ..B.. */
  } else {
    /* ..A.. */
  }
Run Code Online (Sandbox Code Playgroud)

或者是使用编译器特定提示的唯一方法?(例如海湾合作委员会的__builtin_expect)

编译器会根据if条件的顺序对条件进行不同的处理吗?

c c++ compiler-construction optimization branch-prediction

38
推荐指数
4
解决办法
9589
查看次数

CMake ExternalProject_Add() - 使用自定义的CMakeLists.txt构建

我正在构建lua作为外部项目,我想使用我自己的CMakeLists.txt而不是捆绑的Makefile.这就是我在主CMakeLists.txt中的内容:

include(ExternalProject)
set(lua_RELEASE 5.1.4)
ExternalProject_Add(
    lua-${lua_RELEASE}
    URL http://www.lua.org/ftp/lua-${lua_RELEASE}.tar.gz
    DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/download/lua-${lua_RELEASE}
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/lua/lua-${lua_RELEASE}
    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/build/lua-${lua_RELEASE}
    UPDATE_COMMAND ""
    PATCH_COMMAND ""
    INSTALL_COMMAND ""
)
Run Code Online (Sandbox Code Playgroud)

要使BUILD步骤起作用,SOURCE_DIR中必须有一个CMakeLists.txt.我现在在SOURCE_DIR中有这个CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

project(lua)

set(lua_library
  lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c
  lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c
  ltable.c ltm.c lundump.c lvm.c lzio.c
  lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c
  ltablib.c lstrlib.c loadlib.c linit.c
)

foreach(s ${lua_library})
    set(lua_LIBRARY ${lua_LIBRARY} src/${s})
endforeach()

add_definitions(-DLUA_ANSI=1)
add_library(lua STATIC ${lua_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

这有效,但我不满意让lua源文件混乱我的版本控制CMakeLists.txt.

有没有办法为不在 SOURCE_DIR中的构建步骤指定自定义CMakeLists.txt ?

cmake external-project

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

为什么const限定符不能处理const对象上的指针成员?

我知道这已被问过很多,但我能找到的唯一答案就是当const-ness实际上是使用(int*)或类似的方法进行的.当没有涉及强制转换时,为什么const限定符不在const对象上处理指针类型成员变量?

#include <iostream>

class bar {
public:
    void doit()       { std::cout << "    bar::doit() non-const\n"; }
    void doit() const { std::cout << "    bar::doit() const\n"; }
};

class foo {
    bar* mybar1;
    bar mybar2;
public:
    foo() : mybar1(new bar) {}
    void doit() const {
        std::cout << "foo::doit() const\n";
        std::cout << "  calling mybar1->doit()\n";
        mybar1->doit();  // This calls bar::doit() instead of bar::doit() const
        std::cout << "  calling mybar2.doit()\n";
        mybar2.doit(); // This calls bar::doit() const correctly
    }
    // ... (proper copying elided …
Run Code Online (Sandbox Code Playgroud)

c++ pointers const data-members

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

支持和反对在跨平台库中独占支持std :: wstring的参数

我目前正在开发一个跨平台的C++库,我打算用Unicode识别它.我目前通过typedef和宏对std :: string或std :: wstring进行编译时支持.这种方法的缺点是它会强制您使用宏,L("string")并根据字符类型大量使用模板.

支持std :: wstring只支持和反对的论据是什么?

使用std :: wstring是否会影响GNU/Linux用户群,首选UTF-8编码?

c++ unicode cross-platform wstring

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