标签: clang++

在Clang上禁用"移动构造函数可用时删除复制构造函数"

在StackOverflow上查看我在使用C++ 11标准时发现在Clang ++上,如果已经为您的类定义了一个移动构造函数,则隐式构造函数生成被禁用,即复制构造函数被"删除已删除".

有没有办法禁用这种行为?

此外,这种行为是否标准化?因为我在GCC中没有相同的行为.

c++ clang c++11 clang++

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

C++ 11 std :: map程序无法在clang 3.4中编译

我是C++的新手.我试图在clang 3.4中用"-std = c ++ 11 -stdlib = libc ++"标志编译一个非常简单的std :: map progeam,我得到了一些我不明白的错误.

#include<map>
#include<string>

template<typename KeyType>
struct ReverseSort {
    bool operator() (const KeyType& key1, const KeyType& key2) {
        return (key1 > key2);
    }
};

int main() {
    using namespace std;
    map<int, string> mapIntToString1;
    map<int, string, ReverseSort<int> > mapIntToString4(mapIntToString1.cbegin(), mapIntToString1.cend());

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误是:

map:457:17: error: no matching function for call to object of type 'const ReverseSort<int>'
Run Code Online (Sandbox Code Playgroud)

我知道错误来自main()中的第3行,只是不明白为什么.同样的程序在g ++ 4.8.2中带有"-std = c ++ 11"标志,我相信它在VC2010中也很好.

谢谢.

c++ clang c++11 clang++

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

为什么这个简单的C++代码不会用clang ++编译?

这是一个非常简单的C++程序.

// test.h
class Test {
     public:
         Test();
};

// test.cpp
#include "test.h"
Test::Test()
{
   // do something
}

// main.cpp
#include "test.h"
int main() {
    Test t;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我试图使用此命令行在OSX上使用clang ++编译它,我收到此错误:

[test]$ clang++ main.cpp -o main
Undefined symbols for architecture x86_64:
  "Test::Test()", referenced from:
      _main in main-017149.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是使用-v开关的编译:

[test]$ clang++ main.cpp -o main -v
Apple …
Run Code Online (Sandbox Code Playgroud)

c++ macos clang++

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

命名空间std中没有名为"function"的类型

我想传递lambdas,所以我定义了一个这样的函数:

double getInput(std::string inputDescription, std::function<bool(double)> isValid) { ... }
Run Code Online (Sandbox Code Playgroud)

但是gcc拒绝编译它.我很快就知道我需要一个支持C++ 11的编译器,所以我用MacPorts下载了clang 3.5.我找到了clang ++并确认它是正确的版本(我并没有意外地使用原来的clang 1.7):

$ /opt/local/bin/clang++ --version
clang version 3.5.0 (trunk 210448)
Target: x86_64-apple-darwin10.8.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)

但即使是Clang 3.5也给了我:

tempConverter.cpp:14:52: error: no type named 'function' in namespace 'std'
double getInput(std::string inputDescription, std::function<bool(double)> isValid) {
                                              ~~~~~^
Run Code Online (Sandbox Code Playgroud)

完整的.cpp文件:

#include <iostream>
#include <cmath>
#include <iomanip>
#include <functional>
#include <string>

static const double minTemp = -273.15;
static const double maxTemp = 500.0;

inline bool between(double x, double min, double max) {
    return min <= …
Run Code Online (Sandbox Code Playgroud)

c++ lambda clang c++11 clang++

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

AddressSanitizer:地址错误时堆栈溢出?

因此,我创建了一个使用递归来反转链表的函数。我的反向函数工作正常,但是当我尝试在可执行文件上运行 asan 时,它在反向函数的特定地址处给出了堆栈溢出错误。我已尝试一切方法来修复它。我试图在完成工作后将堆栈中的所有变量设为 NULL。我已经从堆中取消分配了所有内存。我对文件运行 valgrind,它告诉我所有内存已被释放并且没有泄漏。我该怎么办?

AddressSanitizer:堆栈溢出

PS 我在 C++ 中使用 clang++ 编译器。

c++ clang++

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

我可以安全地假设if(true)和if(false)将被优化吗?

在我的代码中,我有一个带bool value模板参数的函数.除了一行之外,在truefalse案例中函数的实现几乎完全相同.所以我想我会if(value)发表一个声明,以避免重写相同的函数两次.调用函数时,value在编译时确定,因此if语句缩减为a if(true)或a if(false).现在,我想知道:这是安全的假设,任何合理的编译器(比如说g++,clang++...)将优化这种说法?

是的,性能至关重要,是的,功能非常轻巧,因此即使是单一的if也会影响速度,是的,这个功能需要在许多人类赖以生存的实时设备上执行数万次.

c++ optimization g++ clang++

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

clang ++是否忽略了extern"C"的某些弃用警告?

如果我使用clang 3.8.1编译:

extern "C" {
int foo(int x) { register int y = x; return y; }
}

int main() { return foo(123); }
Run Code Online (Sandbox Code Playgroud)

我收到警告:

a.cpp:3:18: warning: 'register' storage class specifier is deprecated and incompatible with C++1z [-Wdeprecated-register]
int foo(int x) { register int y = x; return y; }
                 ^~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

...我真的不应该得到,因为内部函数是C代码.如果我使用GCC 6.3.1,即使有-Wall,我也不会收到此警告.

这是一个铿锵的错误还是我做错了什么?

c++ multilingual clang++ extern-c

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

为什么 gcc 不检测所有处理的枚举值?

我有一些 C++ 代码,我可以在其中切换枚举中的值。我试图用 -Wall -Wextra -Werror 编译它。这在使用 clang 时很好。但是,GCC 抱怨未涵盖默认代码路径。简化版本如下所示:

enum class Types: int {
    A,
    B,
    C
};

bool some_logic(Types val) {
    switch (val) {
        case Types::A:
            return (false);
        case Types::B:
            return (true);
        case Types::C:
            return (false);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过在函数末尾添加一个 default case 或另一个 return 语句来处理这个问题。但是,我的问题是为什么 GCC 没有检测到枚举的所有情况都已涵盖?或者换一种说法,海湾合作委员会在这里抱怨是否有正当理由?

我在此处对编译器输出进行了比较。

c++ gcc gcc-warning clang++

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

返回捕获 lambda 的 lambda 时发出 Clang 警告

以下尝试包装 lambda 的(简化)代码向我提供了一些 Clang 版本的警告,但不是全部,也不是 gcc。

template<typename Lambda>
auto wrapLambda(Lambda lambda)
{
    return [&lambda]() {
        lambda();
    };
}

auto wrappedLambda = wrapLambda([](){ return 0; });
Run Code Online (Sandbox Code Playgroud)
warning: address of stack memory associated with parameter 'lambda' returned [-Wreturn-stack-address]  
    return [&lambda]() {  
             ^~~~~~
Run Code Online (Sandbox Code Playgroud)

这是一个错误,还是我错过了什么?我x86-64 clang (trunk)Godbolt 中收到警告,并clang version 11.1.0作为更大的回购的一部分,但我无法隔离该版本的故障。

这个相关问题中的例子没有给出警告。


改进(我认为)版本:

template<typename Callable>
auto wrapCallable(Callable&& callable)
{
    return [callable = std::forward<Callable>(callable)]() {
        callable();
    };
}

auto wrappedCallable = wrapCallable([](){ return 0; });
Run Code Online (Sandbox Code Playgroud)

这沉默的警告与x86-64 clang (trunk) …

c++ c++11 clang++

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

以下哪项是正确的行为(g++ 与 clang++-12)?

以下是代码:

#include <iostream>

const int& temp_func() {
    return 3;
}

int main() {
    std::cout << temp_func() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

用g++编译时(Ubuntu 9.3.0-17ubuntu1~20.04),结果:

[1]    402809 segmentation fault ...
Run Code Online (Sandbox Code Playgroud)

另一方面,当使用 clang++-12 编译时,结果:

3
Run Code Online (Sandbox Code Playgroud)

c++ g++ clang++

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

标签 统计

c++ ×10

clang++ ×10

c++11 ×4

clang ×3

g++ ×2

extern-c ×1

gcc ×1

gcc-warning ×1

lambda ×1

macos ×1

multilingual ×1

optimization ×1