考虑一下我有两个字符串:
std::string s1 = "ab";
std::string s2 = "cd";
Run Code Online (Sandbox Code Playgroud)
我想检查(例如使用EXPECT_EQ),如果某些给定std::string str的等于s1或s2.
如果GTEST的ASSERT_*和EXPECT_*将返回bool我可以写
EXPECT_TRUE(EXPECT_EQ(str, s1) || EXPECT_EQ(str, s2));
Run Code Online (Sandbox Code Playgroud)
但不幸的是,他们没有.
在Effective Modern C++Scott Meyers的书中提到,无作用域枚举和有作用域枚举(枚举类)之间的主要区别之一是我们不能向前声明前者(参见第 3 章,第 10 项 - “首选作用域枚举而不是无作用域枚举”)。例如:
enum Color; *// error!*
enum class Color; *// fine*
Run Code Online (Sandbox Code Playgroud)
但是我写了下面提到的小例子,发现事实并非如此。
测试.h
#pragma once
enum names;
void print(names n);
Run Code Online (Sandbox Code Playgroud)
测试.cpp
#include "test.h"
#include <iostream>
enum names { John, Bob, David };
void print(names n)
{
switch (n)
{
case John:
case Bob:
case David:
std::cout << "First names." << std::endl;
break;
default:
std::cout << "Other things" << std::endl;
};
}
Run Code Online (Sandbox Code Playgroud)
主程序
#include "test.h"
#include <iostream>
int …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建我的项目并在另一台机器上运行可执行文件,在其中我可以看到线程相关的问题(如果存在)。我正在使用 VS2019 并-fsanitize=thread -fPIE -pie -g在Configuration Properties->Debugging->Command Arguments. 当我运行 .exe 文件时,我没有看到任何我认为应该生成的文件。我是否向编译器提供了错误的参数或者这里出了什么问题?
虽然我使用带有编译器标志的 VS2019 /std:c++latest,但我无法成功包含标头<source_location>。编译出现如下错误:
fatal error C1083: Cannot open include file: 'source_location': No such file or directory
Run Code Online (Sandbox Code Playgroud) 目前我正在阅读Scott Meyers的Effective Modern C++(第15项 - 尽可能使用constexpr).作者说:
当使用编译期间未知的一个或多个值调用constexpr函数时,它的作用类似于普通函数,在运行时计算其结果.这意味着您不需要两个函数来执行相同的操作,一个用于编译时常量,另一个用于所有其他值.constexpr功能可以完成所有工作.
我在http://coliru.stacked-crooked.com/中尝试了以下代码片段
#include <iostream>
class Point
{
public:
constexpr Point(double a, double b) noexcept
: _a(a), _b(b)
{
}
void print() const noexcept
{
std::cout << "a -> " << _a << "\tb -> " << _b << std::endl;
}
private:
double _a;
double _b;
};
double get_a() noexcept
{
return 5.5;
}
double get_b() noexcept
{
return 5.6;
}
int main()
{
constexpr Point p1(2.3, 4.4);
p1.print(); …Run Code Online (Sandbox Code Playgroud)