有没有可行的分支预测提示方法?请考虑以下示例:
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条件的顺序对条件进行不同的处理吗?
我正在构建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 ?
我知道这已被问过很多,但我能找到的唯一答案就是当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++库,我打算用Unicode识别它.我目前通过typedef和宏对std :: string或std :: wstring进行编译时支持.这种方法的缺点是它会强制您使用宏,L("string")并根据字符类型大量使用模板.
支持std :: wstring只支持和反对的论据是什么?
使用std :: wstring是否会影响GNU/Linux用户群,首选UTF-8编码?
c++ ×3
c ×1
cmake ×1
const ×1
data-members ×1
optimization ×1
pointers ×1
unicode ×1
wstring ×1