我的问题是:“我可以将赋值的结果传递给 C++ 中的函数吗?”
我想这样做的原因是变量具有特定类型,例如“int”,因此我将值分配给变量并将整个内容传递给以“int”作为参数的重载函数。
这样做的主要原因是让代码更小更容易阅读,而不是:
val = 2
function(val);
Run Code Online (Sandbox Code Playgroud)
我得到:
function(val = 2);
Run Code Online (Sandbox Code Playgroud)
这可以吗?如果是这样,是否有惯例表明出于某种原因这是糟糕的编码实践?
谢谢,饲料
可以说我有以下代码片段:
// 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&'
我的问题:
我正在尝试编写一个宏,以便在用户需要时使用抑制未使用的变量警告(例如,在派生类中,当您尚未实现整个类时)。我知道我可以删除变量名称...但为了明确起见,我更喜欢宏)。
到目前为止我有这个:
#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。
有很多关于此的帖子 - 但我似乎找不到明确的答案。有些人说它有效,有些人则不然,还有人说它的工具/IDE 才是问题所在。
所以我尽可能地做了一个小例子。这是我有的两个文件:
[
{
"arguments": [ "gcc", "test.cpp" ],
"directory": "/home/user/development/sandbox/comp_commands",
"file": "test.cpp"
}
]
Run Code Online (Sandbox Code Playgroud)
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) 我对我在帖子中读到的内容有些困惑: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 ...”部分基本上是相同的重复,我可以理解它,但是如果某些或所有“案例”之间存在显着差异,那么这仍然适用吗?
我试图找出可以在 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) 刚刚开始在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) 给定以下内容:
为了方便起见,以下是代码本身(并且我不确定我的链接是否有效):
#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选项,但我想我会看看是否有人有其他想法...
鉴于此代码
// 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% 关于模板生成机制(即它是否将其复制/粘贴到每个翻译单元中? )
bash中的-n参数是什么local -n var...意思?- 它与什么不同local var...
我找不到一个很好的例子/解释。没有关键字的手册页(看起来?)。我发现的最接近的是这里的评论:local: -n: invalid option - 这表明不使用!参数扩展