小编Ozn*_*nOg的帖子

如何在 Visual Studio 代码中为 C++ 设置默认代码?

在 CodeBlocks 中,可以设置每次创建新文件时都会打开的代码。一种代码模板或骨架。

如何设置默认代码以在 Visual Studio Code C++ 中打开,以便每次创建新文件时都不必编写它?我的意思是,我需要它来显示以下代码,而不是创建一个空白文件:

#include <iostream>

using namespace std;

int main(){

}
Run Code Online (Sandbox Code Playgroud)

visual-studio-code

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

有没有办法在g ++/clang ++中使用自定义修改?

使用c ++模板时,我们经常会得到很长的错误名称

_ZN11__sanitizer13InternalAllocEmPNS_28SizeClassAllocatorLocalCacheINS_20SizeClassAllocator32ILm0ELy140737488355328ELm0ENS_12SizeClassMapILm3ELm4ELm8ELm17ELm64ELm14EEELm20ENS_15TwoLevelByteMapILy32768ELy4096ENS_20NoOpMapUnmapCallbackEEES5_EEEEm

这在名义上很明显很好,并且易于调试,但是当我使用大型自定义类型(具有大型命名空间)时,由于名称错误,最终会出现非常大的二进制文件; 有些工具(如valgrind)甚至有一个符号名称最大长度,几乎不可能进行分析.

我想知道是否有办法让g ++/clang ++使用自定义的修改函数(比如md5),这样很长的符号变得 5c66b1073e1b453900bd7d32cb79fc0e更短.

c++ g++ name-mangling clang++

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

constexpr的全局初始化顺序

让我们考虑一下这些简单的代码,它们只是尝试从constexpr数组初始化映射:

#include <string>
#include <map>
#include <array>
#include <tuple>

constexpr std::array<std::pair<int, const char *>, 10> my_array {
    { { 0, "dd" },
    { 1, "dd" },
    { 2, "dd" },
    { 7, "dd" },
    { 8, "dd" },
    { 9, "dd" }}
   };

std::map<int, std::string> my_map(std::begin(my_array), std::end(my_array));

int main() {
    return my_map[0].size(); //dummy random operation
}
Run Code Online (Sandbox Code Playgroud)

我知道没有办法预测两个变量(my_array和my_map)的初始化顺序。就是说,my_array是constexpr,因此应该在编译时可用,因此启动时应该没有“初始化顺序”问题。

这段代码正确还是初始化顺序问题仍然存在?

c++ constexpr c++14

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

为什么模板基类不被强制实例化

我有 2 个模板类,一个从另一个继承。

template <class T>
class X {
    public:
    int get() { return 1; }
};

template <class T>
class B : public X<T> {};

// Force B instantiation would expect X to be forced as well
template class B<int>;

// If I remove next line, no code is emitted for X
template class X<int>
Run Code Online (Sandbox Code Playgroud)

当强制 B 的模板实例化时,X 也不会被实例化(请参阅https://godbolt.org/z/3vvenM8j4

这是什么原因呢?

注意:这是如何强制实例化与类型别名一起使用的模板类的后续内容

我希望给定的解决方案能够工作,但事实并非如此

c++ templates

6
推荐指数
0
解决办法
67
查看次数

OpenCL浮点精度

我在OpenCL中发现了主机 - 客户端浮点标准的问题.问题是,在x86中编译时,Opencl计算的浮点数与我的visual studio 2010编译器的浮点数不同.但是,在x64中进行编译时,它们处于相同的限制.我知道它必须与之相关,http://www.viva64.com/en/b/0074/

我在测试过程中使用的来源是:http://www.codeproject.com/Articles/110685/Part-1-OpenCL-Portable-Parallelism 当我在x86中运行程序时,它会给我202个相同的数字,当时内核和C++程序占用了1269760个数字.然而,在64位构建中,1269760数字是正确的,换句话说是100%.此外,我发现opencl和x86 c ++的计算结果之间的误差是5.5385384e-014,这是一个非常小的部分但不够小,与数字的epsilon相比,即2.92212543378266922312416e-19.
这是因为,错误需要小于epsilon,因此程序可以将这两个数字识别为一个相同的数字.当然,通常人们永远不会比较本地的浮子,但很高兴知道浮动限制是不同的.是的,我试图设置flt:static,但得到了同样的错误.

所以我想对这种行为做一些解释.提前感谢所有答案.

c++ windows precision opencl

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

CMake rpm 在 /etc/init.d 中安装文件

我想在 /etc/init.d 目录中安装一个文件

我已经写了代码

INSTALL(FILES  ${CMAKE_SOURCE_DIR}/app/script/appd  DESTINATION /etc/init.d/appd)
Run Code Online (Sandbox Code Playgroud)

但是当我使用 cmake 运行打包代码时出现错误

CMake Error at /home/vivek/workspace/app/build/standalone/cmake_install.cmake:54 (FILE):
  file cannot create directory: /etc/init.d/appd.  Maybe need
  administrative privileges.
Run Code Online (Sandbox Code Playgroud)

如何设置 cmake 在 /etc/init.d 目录中安装文件?

cmake cpack

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

是否可以在信号处理程序中设置承诺?

我正在寻找一种方法来停止每 2 秒执行一次任务的线程。我决定尝试使用 std::promise/future 以便在设置承诺时线程可以立即退出。

#include <future>
#include <iostream>
#include <chrono>
#include <csignal>

std::promise<void> stop;

int main() {

    std::signal(SIGINT, [] (int)  { stop.set_value(); } );

    auto future = stop.get_future();

    while (future.wait_for(std::chrono::seconds(1)) != std::future_status::ready) {
            std::cout << "I'm still there" << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

实际上这不起作用并以这种方式崩溃:

$ ./a.out 我还在那里 ^Cterminate 在抛出一个 'std::system_error'
what()实例后被调用:未知错误 -1 放弃(核心转储)

好的,一个人应该注意他在处理程序上下文中所做的事情,但我必须说我没有预料到这次崩溃;我真的不明白……你有什么想法吗?

c++ signal-handling promise c++11

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

openCL 内核计算 Pi 的值不正确

再会,

我有一个 openCL 内核,它使用莱布尼茨公式来计算 pi。目前我的问题是我得到的值不是 pi,而是 4。

__kernel void calculatePi(int numIterations, __global float *outputPi,
                          __local float* local_result, int numWorkers)
{
    __private const uint gid = get_global_id(0);
    __private const uint lid = get_local_id(0);
    __private const uint offset = numIterations*gid*2; 
    __private float sum = 0.0f;

    // Have the first worker initialize local_result
    if (gid == 0)
    {
        for (int i = 0; i < numWorkers; i++)
        {
            local_result[i] = 0.0f;
        }
    }

    // Have all workers wait until this is completed
    barrier(CLK_GLOBAL_MEM_FENCE); …
Run Code Online (Sandbox Code Playgroud)

c kernel for-loop pi opencl

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

ld:对“lua_”的未定义引用。我不知道为什么 ld 不能引用 lua,即使它在那里

我正在尝试安装此代码我正在尝试为一个大学项目安装这个git-repo,但我陷入了困境,因为 ld 似乎无法正确链接 lua。我按照安装说明进行操作并使用以下命令编译代码:

catkin_make -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_CXX_STANDARD=14 
Run Code Online (Sandbox Code Playgroud)

失败并显示几条消息,例如:

/usr/bin/ld: /home/felixk/catkin_ws/devel/lib/libflatland_lib.so: undefined reference to `lua_toboolean(lua_State*, int)'
/usr/bin/ld: /home/felixk/catkin_ws/devel/lib/libflatland_lib.so: undefined reference to `lua_tonumberx(lua_State*, int, int*)'
...
/usr/bin/ld: /home/felixk/catkin_ws/devel/lib/libflatland_lib.so: undefined reference to `lua_pushstring(lua_State*, char const*)'
/usr/bin/ld: /home/felixk/catkin_ws/devel/lib/libflatland_lib.so: undefined reference to `lua_isstring(lua_State*, int)'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

该代码已经过测试并且可以在 Ubuntu 18.04 上运行,但我正在尝试让它在 Manjaro 上运行。手册指出这liblua5.2-dev是需要的,我从 AUR安装了lua52 ,它似乎提供了正确的库。

的输出ldd是:

ldd /home/felixk/catkin_ws/devel/lib/libflatland_lib.so | grep lua
        liblua5.2.so.5.2 => /usr/lib/liblua5.2.so.5.2 (0x00007f23fd51c000)
Run Code Online (Sandbox Code Playgroud)

然后我检查是否/usr/lib/liblua5.2.so.5.2存在并且确实存在。我试图用来readelf检查是否liblua5.2.so.5.2 …

c++ lua ld archlinux manjaro

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