小编Dav*_*yan的帖子

gtest:检查string是否等于两个字符串中的一个

考虑一下我有两个字符串:

std::string s1 = "ab"; 
std::string s2 = "cd";
Run Code Online (Sandbox Code Playgroud)

我想检查(例如使用EXPECT_EQ),如果某些给定std::string str的等于s1s2.

如果GTEST的ASSERT_*EXPECT_*将返回bool我可以写

EXPECT_TRUE(EXPECT_EQ(str, s1) || EXPECT_EQ(str, s2));
Run Code Online (Sandbox Code Playgroud)

但不幸的是,他们没有.

c++ googletest

3
推荐指数
2
解决办法
1474
查看次数

为什么无作用域枚举的声明会编译?

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)

c++ enums c++11

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

Visual Studio 2019 中的 ThreadSanitizer

我正在尝试构建我的项目并在另一台机器上运行可执行文件,在其中我可以看到线程相关的问题(如果存在)。我正在使用 VS2019 并-fsanitize=thread -fPIE -pie -gConfiguration Properties->Debugging->Command Arguments. 当我运行 .exe 文件时,我没有看到任何我认为应该生成的文件。我是否向编译器提供了错误的参数或者这里出了什么问题?

visual-studio thread-sanitizer

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

无法在 VS2019 中使用 std::source_location

虽然我使用带有编译器标志的 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)

c++ c++20

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

在编译时不知道参数时,不会调用`constexpr`构造函数

目前我正在阅读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)

c++ c++11 c++14

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

标签 统计

c++ ×4

c++11 ×2

c++14 ×1

c++20 ×1

enums ×1

googletest ×1

thread-sanitizer ×1

visual-studio ×1