struct A{
constexpr operator bool()const{ return true; }
};
int main(){
auto f = [](auto v){ if constexpr(v){} };
A a;
f(a);
}
Run Code Online (Sandbox Code Playgroud)
clang 6 接受代码,GCC 8 拒绝它:
$ g++ -std=c++17 main.cpp
main.cpp: In lambda function:
main.cpp:6:37: error: 'v' is not a constant expression
auto f = [](auto v){ if constexpr(v){} };
^
Run Code Online (Sandbox Code Playgroud)
谁是正确的,为什么?
当我根据每个引用获取参数时,都拒绝代码:
struct A{
constexpr operator bool()const{ return true; }
};
int main(){
auto f = [](auto& v){ if constexpr(v){} };
constexpr A a;
f(a);
}
Run Code Online (Sandbox Code Playgroud)
用clang …
我有一个带有 SpringBoot2 和 Junit5 的应用程序,现在我正在尝试进行测试。我有一个名为 OrderService 的类,如下所示:
@Component
public class OrderService {
@Value("#{'${food.requires.box}'.split(',')}")
private List<String> foodRequiresBox;
@Value("#{'${properties.prioritization}'.split(',')}")
private List<String> prioritizationProperties;
@Value("${further.distance}")
private Integer slotMeterRange;
@Value("${slot.meters.long}")
private Double slotMetersLong;
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,该类有许多 @Value 注释,用于从 application.properties 文件中提取值。
在 POM 文件中,我有以下依赖项:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.0.5.RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在test/resources文件夹中,我有包含以下信息的 application.properties 文件:
properties.prioritization:vip,food
food.requires.box:pizza,cake,flamingo
further.distance:2
slot.meters.long:0.5
Run Code Online (Sandbox Code Playgroud)
测试文件如下所示:
properties.prioritization:vip,food
food.requires.box:pizza,cake,flamingo
further.distance:2
slot.meters.long:0.5
Run Code Online (Sandbox Code Playgroud)
但测试在尝试使用foodRequiresBox时会抛出 …
下面的代码输出
rm-data;
Content-Disposition: form-data;
Run Code Online (Sandbox Code Playgroud)
https://godbolt.org/z/h5z89qv6f
#include <iostream>
#include <string>
int main()
{
std::string a = "Content-Disposition: form-data;" + '\r' + '\n';
std::cout << a << std::endl;
std::string b = "Content-Disposition: " + std::string("form-data;") + '\r' + '\n';
std::cout << b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我期望a有一个 CRLF 连接,但看起来它通过添加\r (13) + \n (10) = 23文本内起始偏移量的 ASCII 值来进行指针算术。
但是,对于b,CRLF 已正确连接。
也许更好的方法是
std::string a = "Content-Disposition: form-data;" + std::string("\r\n");
Run Code Online (Sandbox Code Playgroud)
或者
std::string a = "Content-Disposition: form-data;\r\n";
Run Code Online (Sandbox Code Playgroud)
问题
CRLF 之前的数据类型是否决定串联规则?
当您调用函数时,如果传递给函数的参数不是数组,或者不是有意使用与符号 ( ) 进行引用传递,则这些参数将按值传递&。例如,
void boo (int a, int b) {}
int main() {
int var1 {1};
int var2 {2};
boo(var1,var2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,整型变量var1和的值var2被复制到函数参数a和 ,b并存储在为函数分配的堆栈帧中boo()。我的问题是:
如果我写
void boo (int a, int b) {}
int main() {
boo(1,2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是整数文字1并且2不存储在main()堆栈帧中,因为它们现在是右值?
如果我改为写
void boo (int &a, int &b) {}
int main() {
int var1{1};
int var2{2};
boo(var1,var2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是参数 …
C++23 引入了范围视图std::generator,用作协程的返回。根据以前的观点,通常很难生成复杂的数据序列。我认为使用协程可以大大简化这一过程。
不幸的std::generator是,目前没有任何标准库实现,并且在许多项目中,C++20 将在一段时间内保持标准。std::generator有没有办法在C++20项目中使用?
我有一个函数,它的参数为QStringView. 除此之外,这必须转换为std::string. 有这个QString功能。toStdString()有没有办法避免潜在昂贵的中间步骤 via QString?
在cppreference.com上我找到了以下代码示例:
#include <iostream>
#include <string_view>
// Print a string surrounded by single quotes, its
// length and whether it is considered empty.
void check_string(std::string_view ref)
{
std::cout << std::boolalpha
<< "'" << ref << "' has " << ref.size()
<< " character(s); emptiness: " << ref.empty() << '\n';
}
int main(int argc, char **argv)
{
// An empty string
check_string("");
// Almost always not empty: argv[0]
if (argc > 0) // <--- is this necessary?
check_string(argv[0]);
}
Run Code Online (Sandbox Code Playgroud)
argc …
我有一个元素为 的数组[0, 1, 0, 3, 12]。我想将所有零移到它的末尾,同时保持非零元素的相对顺序。移动后的数组应该如下所示[1, 3, 12, 0, 0]。为此,我编写了以下代码:
#include <bits/stdc++.h>
using namespace std;
bool cmp(int a, int b){
if (a == 0) {
return a > b;
} else {
return true;
}
}
int main(){
int arr[] = {0, 1, 0, 3, 12};
sort(arr, arr + 5, cmp);
for (int i: arr) {
cout << i;
}
}
Run Code Online (Sandbox Code Playgroud)
我编写这段代码时认为,只要false在非零元素之前放置零,i就可以交换元素,但此代码给出的输出是,即[12, 3, 1, 0, 0]它只是按降序对元素进行排序。谁能解释一下为什么我的比较器功能不起作用?我可以使用比较器功能来做到这一点吗?
假设我们的 中存储了 100 万个元素std::vector<T>,它的容量已满。现在我只想在其中添加 1 个元素。根据向量的概念,现在向量的容量将在堆中的新内存中增加一倍,并且所有 100 万个元素将被复制到新的内存位置。这似乎是一项艰巨的任务。有什么方法可以避免这种复制并仅在下一个位置添加这个新元素吗?
没有什么。我想不出有什么方法可以避免。大多数开发人员建议我使用另一个容器。
我想通过以下方式管理 WinAPI 函数对std::unique_ptr:
#include <memory>
int* __stdcall construct(){ return new int{5}; }
void __stdcall destruct(int* v){ delete v; }
int main() {
using Ptr = std::unique_ptr<int, void(&)(int*)>;
Ptr v(construct(), destruct);
}
Run Code Online (Sandbox Code Playgroud)
当我使用 MSVC 19.33 构建 64 位二进制文件时,代码可以正常工作。如果我构建 32 位二进制文件,则会出现错误。
example.cpp
<source>(8): error C2660: 'std::unique_ptr<int,void (__cdecl &)(int *)>::unique_ptr': function does not take 2 arguments
C:/data/msvc/14.33.31631/include\memory(3291): note: see declaration of 'std::unique_ptr<int,void (__cdecl &)(int *)>::unique_ptr'
Compiler returned: 2
Run Code Online (Sandbox Code Playgroud)
__stdcall如果我明确命名in ,它适用于两者std::unique_ptr<int, void(__stdcall&)(int*)>,所以我假设它是函数签名的一部分。
为什么 32 位和 64 位会有这种差异?这是编译器中的错误吗?
我是 C++ 新手,最近通过 u-demy 讲座学习了指针和参考资料。讲座结束后,我正在解决使用单独的函数反转字符串的问题。我想出了一个代码,但由于某种原因,我可以使用 [] 表示法访问单个字符(就像reverse[0]等于!)但是当我打印整个字符串时,我得到一个空字符串?是什么导致了这个问题?
提前感谢您的宝贵时间!
这里我粘贴了我的代码:
#include <iostream>
// using namespace std;
std::string reverse_string(const std::string &str) {
std::string reversed;
size_t size {str.length()};
for(int i{}; i < size/2; i++) {
reversed[i] = str[(size-1)-i];
reversed[(size-1)-i] = str[i];
}
return reversed;
}
int main() {
// Write C++ code here
std::string input = "Hello, World!";
std::string reversed = reverse_string(input);
std::cout << reversed << std::endl; //I get nothing, BUT
std::cout << reversed[0] << std::endl //here I do get a …Run Code Online (Sandbox Code Playgroud) 警告:/var/cache/yum/x86_64/7/jenkins/packages/jenkins-2.387.2-1.1.noarch.rpm:标头 V4 RSA/SHA512 签名,密钥 ID ef5975ca:NOKEY
我正在使用 vagrant 和 virtual-box for centos VM 我使用下面的命令来安装 jenkins
yum update -y
curl --silent --location http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo | sudo tee /etc/yum.repos.d/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum install java-11* -y
yum install jenkins -y
Run Code Online (Sandbox Code Playgroud) c++ ×10
stdstring ×3
c++20 ×2
algorithm ×1
c++17 ×1
c++23 ×1
centos ×1
comparator ×1
constexpr ×1
containers ×1
if-constexpr ×1
jenkins ×1
junit ×1
junit5 ×1
qt ×1
qt6 ×1
sorting ×1
spring-boot ×1
std-ranges ×1
stdcall ×1
stl ×1
unique-ptr ×1
vagrant ×1
vector ×1
virtualbox ×1
visual-c++ ×1
winapi ×1