小编Dán*_*dor的帖子

所有CopyConstructible类型都是MoveConstructible类型吗?

根据N3337工作草案(与已发布的ISOC++ 11标准最相似的草案)和cppreference.com,答案是肯定的.

N3337:

表21 - CopyConstructible要求(除了MoveConstructible)[copyconstructible] [...]

cppreference.com:

类型T满足CopyConstructible if

  • T型满足MoveConstructible,[...]

但是根据使用gcc(Ubuntu 4.8.4-2ubuntu1~14.04)4.8.4编译main.cpp并在Ubuntu 14.04.3 LTS中使用引用语句运行a.out的结果,答案不是.

main.cpp中:

#include <iostream>
#include <type_traits>

struct As
{
    As()=default;
    As(As&&)=delete;
    As(const As&)=default;
    As& operator=(As&&)=delete;
    As& operator=(const As&)=delete;
    ~As()=default;
};

int main()
{
    std::cout<<std::is_move_constructible<As>::value<<std::endl;
    std::cout<<std::is_copy_constructible<As>::value<<std::endl;

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

从终端编译和运行:

$ g++ -std=c++11 main.cpp
$ ./a.out
Run Code Online (Sandbox Code Playgroud)

结果(输出):

0
1
Run Code Online (Sandbox Code Playgroud)

我误解了某些内容,或者N3337和cppreference.com是否错误,或者gcc是否包含错误?

c++ ubuntu gcc c++11

6
推荐指数
2
解决办法
266
查看次数

是否有任何技术可以检测GCC的未定义行为?

如果程序根据C++ 11标准以不可预测的方式运行,是否有任何命令行选项或技术使GCC编译器报告错误?

c++ gcc c++11

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

在隐式类型转换期间,最多可以隐式应用多少用户定义的转换运算符?

根据N3337工作草案(与已发布的ISOC++ 11标准最相似的草案),答案最多只有一个.

N3337:

最多一个用户定义的转换(构造函数或转换函数)隐式应用于单个值.

[ Example:

struct X {
    operator int();
};

struct Y {
    operator X();
};

Y a;
int b = a; // error
           // a.operator X().operator int() not tried

int c = X(a); // OK: a.operator X().operator int()

—end example ]
Run Code Online (Sandbox Code Playgroud)

但根据使用gcc(Ubuntu 4.8.4-2ubuntu1~14.04)4.8.4编译main.cpp并在Ubuntu 14.04.3 LTS中使用引用语句运行a.out结果,答案最多不是一个.

main.cpp:

#include <iostream>

struct As
{
    operator int(){ std::cout<<"operator As::int()"<<std::endl; return 1; }
};

struct Bs
{
    operator int(){ std::cout<<"operator …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer implicit-conversion c++11 g++4.8

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

标签 统计

c++ ×3

c++11 ×3

gcc ×2

g++4.8 ×1

implicit-conversion ×1

language-lawyer ×1

ubuntu ×1