小编cod*_*der的帖子

我可以将赋值的结果传递给 C++ 中的函数吗?

我的问题是:“我可以将赋值的结果传递给 C++ 中的函数吗?”

我想这样做的原因是变量具有特定类型,例如“int”,因此我将值分配给变量并将整个内容传递给以“int”作为参数的重载函数。

这样做的主要原因是让代码更小更容易阅读,而不是:

val = 2
function(val);
Run Code Online (Sandbox Code Playgroud)

我得到:

function(val = 2);
Run Code Online (Sandbox Code Playgroud)

这可以吗?如果是这样,是否有惯例表明出于某种原因这是糟糕的编码实践?

谢谢,饲料

c++ function variable-assignment

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

c ++可以通过引用传递临时lambda(适用于msvc/windows但不适用于gcc/linux)?

可以说我有以下代码片段:

// global variable
std::thread worker_thread;

// Template function
template <typename Functor>
void start_work(Functor &worker_fn)  // lambda passed by ref
{
    worker_thread = std::thread([&](){
        worker_fn();
    });
}
Run Code Online (Sandbox Code Playgroud)

这被称为:

void do_work(int value)
{
    printf("Hello from worker\r\n");
}

int main()
{
    // This lambda is a temporary variable...
    start_work([do_work](int value){ do_work(value) });
}
Run Code Online (Sandbox Code Playgroud)

我开始在MSVC2012上开发.这一切都很好,似乎工作.但是当我在Linux平台上移动到gcc编译器时,我得到以下(缩写)错误:

no known conversion for argument 1 '...__lambda3' to '...__lambda3&'

我的问题:

  • 因此,从错误中我假设lambda是一个临时变量因此无法通过引用传递 - 是吗?
  • 另外 - 任何想法为什么这适用于MSVC? - 它是自动修复我写的吗?

c++ lambda gcc visual-studio-2012

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

Visual Studio 相当于 c++11(或更低版本)中的 gcc __attribute__((unused))?

我正在尝试编写一个宏,以便在用户需要时使用抑制未使用的变量警告(例如,在派生类中,当您尚未实现整个类时)。我知道我可以删除变量名称...但为了明确起见,我更喜欢宏)。

到目前为止我有这个:

#ifdef WIN32
    #define UNUSED(x) x
#else
    #define x __attribute__((unused))
#endif
Run Code Online (Sandbox Code Playgroud)

用法如下:

void test_fn(int UNUSED(test_var)) {...}

我看到这篇文章:suppressing-is-never-used-and-is-never-assigned-to-warnings-in-c-sharp,但它给了我一个我无法真正使用的结果(多行#pragmas)。

所以我的问题是,是否有相当于 MSVS 的__attribute__((unused))?- 即在同一条线上?

注意:这个问题没有回答如何做我所问的事情:how-do-i-best-silence-a-warning-about-unused-variables,因为它没有涵盖如何在函数原型中以某种方式使用它适用于 MSVS 和 gcc。

c++ visual-studio c++11 visual-studio-2017

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

clang-tidy-10 和compile_commands.json 不支持相对路径

有很多关于此的帖子 - 但我似乎找不到明确的答案。有些人说它有效,有些人则不然,还有人说它的工具/IDE 才是问题所在。

所以我尽可能地做了一个小例子。这是我有的两个文件:

编译命令.json

[
    {
        "arguments": [ "gcc", "test.cpp" ],
        "directory": "/home/user/development/sandbox/comp_commands",
        "file": "test.cpp"
    }
]
Run Code Online (Sandbox Code Playgroud)

测试.cpp

bool is_it()
{
    // no return value - give clang warning
}
Run Code Online (Sandbox Code Playgroud)

clang-tidy test.cpp现在,如果我在与我得到的文件相同的目录中运行该命令:

[user] comp_commands$ clang-tidy test.cpp 
1 warning generated.
test.cpp:4:1: warning: non-void function does not return a value [clang-diagnostic-return-type]
}
Run Code Online (Sandbox Code Playgroud)

...正如预期的那样。但是,如果我将compile_commands.json 目录中的行更改为:

[user] comp_commands$ clang-tidy test.cpp 
1 warning generated.
test.cpp:4:1: warning: non-void function does not return a value [clang-diagnostic-return-type]
}
Run Code Online (Sandbox Code Playgroud)

然后我得到输出:

[user] comp_commands$ clang-tidy test.cpp 
Skipping /home/user/development/sandbox/comp_commands/test.cpp. …
Run Code Online (Sandbox Code Playgroud)

c++ clang-tidy

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

为什么可以用多态来代替 switch 或 else-if 语句?

我对我在帖子中读到的内容有些困惑:case-vs-if-else-if-which-is-more-efficient

多次建议使用多态来代替长的 case/if-else 语句。我想弄清楚这到底意味着什么。如何更换:

case TASK_A:
    // do things for task A
    break;
case TASK_B:
    // do things for task B
    break;
        :
        :
case TASK_J:
    // do things for task J
    break;
Run Code Online (Sandbox Code Playgroud)

与多态性?如果“do ...”部分基本上是相同的重复,我可以理解它,但是如果某些或所有“案例”之间存在显着差异,那么这仍然适用吗?

c++ polymorphism switch-statement

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

如何创建和编辑准备通过 UDP 序列化的二进制数据数组?

我试图找出可以在 lua 中使用哪些存储类来逐字节创建和操作二进制数据。

例如,Qt 有 QByteArray,或者 c++/c 有 char(或 uint8_t)数组。我觉得字符串不起作用,因为我需要处理 0x00 等值和其他不可打印的字符。我还研究了数组,但它们似乎没有类型,我不知道如何序列化它们。

我有点卡在这里,我将尝试做下面的代码示例:

local socket = require("socket")
-- this does not work, just to show what I am dreaming of doing
--              |len  |type | payload        |
local msgData = {0x05, 0x3A, 0x00, 0xF4, 0x04} 
-- edit part of the payload
msgData[3] = 0x01
-- Send it over UDP
udp:sendto(msgData, "127.0.0.1", 50000);
Run Code Online (Sandbox Code Playgroud)

然后在另一边我想读回该二进制数据:

-- This is how I normally read the data, but "data" I guess is just a string, …
Run Code Online (Sandbox Code Playgroud)

arrays lua

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

在ConEmu中,是否可以在一行中获取命令提示符?

刚刚开始在Windows上使用conemu(经过一段时间使用其他垃圾).它很棒,但有一个元素真的让我烦恼,那就是命令提示符总是分布在两行:

user.name@DESDAH181093 D:\user\workspace\
>
user.name@DESDAH181093 D:\user\workspace\
>
user.name@DESDAH181093 D:\user\workspace\
>
Run Code Online (Sandbox Code Playgroud)

我可以把它压缩到同一条线上,就像这样吗?

user.name@DESDAH181093 D:\user\workspace\>
user.name@DESDAH181093 D:\user\workspace\>
user.name@DESDAH181093 D:\user\workspace\>
Run Code Online (Sandbox Code Playgroud)

我查看了设置并没有发现任何明显的事情.

我看到了这个问题:链接,但我想我想做相反的事情,我无法找到${cwdfull}\n>设置中定义的任何内容......

UPDATE

除了Max的答案之外,这里是我真正需要在CmdInit.cmd文件中更改的内容:

rem Carriage return and `$` or `>`
rem Spare `$E[90m` was specially added because of GitShowBranch.cmd
if "%ConEmuIsAdmin%" == "ADMIN" (
  set ConEmuPrompt2=$S$E[90m$$
) else (
  set ConEmuPrompt2=$S$E[90m$G
)
Run Code Online (Sandbox Code Playgroud)

哪里都ConEmuPrompt2其中:

ConEmuPrompt2=$_$E[90m$$
changed here   ^
Run Code Online (Sandbox Code Playgroud)

windows shell command-line conemu

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

不同目标的C ++转换(编译器)

给定以下内容:

代码链接

为了方便起见,以下是代码本身(并且我不确定我的链接是否有效):

#include <iostream>
#include <vector>
#include <stdint.h>

using namespace std;

int main()
{
    cout<<"Hello World";
    std::vector<std::string> test_vect {"1", "2"};
    long unsigned int size = static_cast<long unsigned int>(test_vect.size());

    std::cout << "size: " << size << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以及以下编译选项: g++ file.c -Wall -Wextra "-Werror" "-Wuseless-cast"

您可以在此处看到我要投射vector.size()long unsigned int,将其标记为Wandbox(我的链接)上无用的投射,但是在我的linux盒上运行的相同代码没有给出警告-但是如果我这样做,它将给我不同的警告撒它。

我了解这两个unsigned longvs size_t可能会有所不同。但是我想做的是编写一些没有所有强制转换警告的警告的代码(也许在交叉编译时是光敏的)。

因此,一个编译器抱怨我正在转换类型,所以我进行了强制类型转换,但是另一个编译器抱怨了无用的强制类型转换-因此我删除了强制类型转换,然后我们开始:(

有没有一种好的方法,这样我就不会在两个编译器上收到警告?

我本来只是要删除该-Wuseless-cast选项,但我想我会看看是否有人有其他想法...

c++ casting cross-compiling

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

自由模板函数需要静态和内联吗?

鉴于此代码

// In header file
template<typename T>
inline static void my_func(T var)
{
    std::cout << var << std::endl;
}

// Used in many cpp files:
void some_function()
{
    my_func(1);
    my_func("test");
}

Run Code Online (Sandbox Code Playgroud)

我刚刚将我的免费功能“升级”为模板。之前它是静态的和内联的。但现在它是一个模板,如果内联和静态仍然适用,我不是 100% - 我猜它们是这样......但我不是 100% 关于模板生成机制(即它是否将其复制/粘贴到每个翻译单元中? )

c++ templates

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

bash中“local -n”中的-n参数是什么意思?

bash中的-n参数是什么local -n var...意思?- 它与什么不同local var...

我找不到一个很好的例子/解释。没有关键字的手册页(看起来?)。我发现的最接近的是这里的评论:local: -n: invalid option - 这表明不使用!参数扩展

linux bash local

4
推荐指数
2
解决办法
2857
查看次数