- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是一个让我感到困惑的小问题。我不知道如何描述它,所以只看下面的代码:
struct B {
B() {}
B(B&) {
std::cout << "not trivial\n";
}
};
int chính() {
B b1;
B b2(b1);
std::cout << std::is_trivially_constructible::value << '\n';
trả về 0;
}
Đầu ra là:
not trivial
1
我正在使用 VS11。
biên tập:
我刚刚测试了 http://en.cppreference.com/w/cpp/types/is_constructible 中的示例.部分输出不正确。
#include
#include
class Foo {
int v1;
double v2;
công cộng:
Foo(int n) : v1(n), v2() {}
Foo(int n, double f) : v1(n), v2(f) {}
};
int chính() {
std::cout << "Foo is ...\n" << std::boolalpha
<< "\tTrivially-constructible from const Foo&? "
<< std::is_trivially_constructible::value << '\n'
<< "\tTrivially-constructible from int? "
<< std::is_trivially_constructible::value << '\n'
<< "\tConstructible from int? "
<< std::is_constructible::value << '\n'
}
Đầu ra là:
Foo is ...
Trivially-constructible from const Foo&? true
Trivially-constructible from int? true//Trivially-constructible from int? false
Constructible from int? true
câu trả lời hay nhất
最终更新
在@SebastianRedl 发表了非常有见地的评论之后,我意识到该标准的意图是指对象的整个构造,而不仅仅是构造函数内部的操作。这意味着 Visual C++ 中确实存在错误。但是,我仍然认为标准的措辞不够明确,因此我将保留其余答案以供后代使用。
澄清一下:OP 提到的行为实际上是一个错误,鉴于此,我在本次更新下面所说的大部分内容都是错误的。
结束更新
这实际上不是编译器错误,而是标准的一个奇怪怪癖,所以您的困惑是可以理解的。
根据C++11标准,以下是is_trivially_constructible::value
的条件成为ĐÚNG VẬY
.
§20.9
is_constructible
is true and the variable definition for::value is_constructible
, as defined below, is known to call no operation that is not trivial
所以,is_trivially_constructible
只要给定的类型可以用给定的参数构造并且它不调用任何非平凡的操作,它就为真。您的示例仅包含一个这样的构造函数,即复制构造函数。事实上,根据“非平凡操作”(本质上是非平凡运算符或构造函数)的定义,这确实适用于您的类型。所以返回ĐÚNG VẬY
是正确的。
但是,有一点很奇怪! C+11 标准对复制构造函数有以下说明:
§12.8.12(强调我的)
MỘT copy/move constructor for class X is trivial if it is not user-provided and if
- class X has no virtual functions (10.3) and no virtual base classes (10.1), and
- the constructor selected to copy/move each direct base class subobject is trivial, and
for each non-static data member of X that is of class type (or array thereof), the constructor selected to copy/move that member is trivial;
otherwise the copy/move constructor is non-trivial.
既然你确实提供了一个用户定义的复制构造函数,你的类就不是简单的复制构造函数。您提供的复制构造函数并不简单。尽管如此,非平凡的复制构造函数确实满足了 is_trivially_constructible
的必要条件。返回 ĐÚNG VẬY
给定一个与您的复制构造函数匹配的参数。
在我看来,这似乎更像是标准中的一个“错误”。 is_trivially_constructible
返回在给定特定参数的情况下该类型是否可平凡构造。这似乎并不能保证构造函数本身被认为是微不足道的!
更新:
在尝试设计一个测试来显示以下情况后,我确实在 VC11 中发现了一个错误。标准描述的逻辑意味着,如果 B
用作另一种类型的子对象(成员或基类),调用 B
的复制构造函数的该类型的任何构造函数应被 std::is_trivially_constructible
视为重要 .在 VC11 中不是这样。
Mã mẫu
#include
#include
struct B
{
B() {}
B(B&) {
std::cout << "not trivial\n";
}
};
struct A : B
{
A(B& B) : b(B){}
B b;
};
int chính()
{
std::cout << std::is_trivially_constructible::value << '\n'; // Should print 1
std::cout << std::is_trivially_constructible::value << '\n'; // Should print 0
getchar();
trả về 0;
关于c++ - 当 T 声明为 T::T(T&) 时,std::is_trivially_constructible
Tất cả sự khác biệt đã biết giữa SQLite, Nhà cung cấp nội dung và Tùy chọn chia sẻ. Nhưng tôi muốn biết khi nào tôi cần sử dụng SQLite hoặc Nhà cung cấp nội dung hoặc tùy thuộc vào tình huống
Cảnh báo: Tôi đang sử dụng một chương trình phụ trợ mà tôi không có toàn quyền kiểm soát, vì vậy tôi đang gặp khó khăn với một số lưu ý trong Backbone mà có thể được giải quyết tốt hơn ở nơi khác... Thật không may, tôi không có lựa chọn nào khác và chỉ có thể xử lý chúng ở đây Vì vậy, tôi ơi
Tôi đã vật lộn cả ngày rồi. Biểu thức tìm kiếm kiểu chữ của tôi hoạt động hoàn hảo với dữ liệu json từ xa. Nhưng khi tôi cố gắng sử dụng cùng một dữ liệu json làm dữ liệu tìm nạp trước thì các đề xuất đều trống. Sau khi nhấp vào logo đầu tiên, tôi nhận được thông báo được xác định trước "Không tìm thấy gì ..." và kết quả là
Tôi đang tạo một chương trình mô phỏng xổ số dự thảo NHL, trong đó sẽ có JTextField ở bên phải màn hình và một quả bóng dự thảo nảy được vẽ ở bên trái. Tôi đã tạo một lớp tên là Ball để triển khai Runnable và trong Draf chính của tôi
Câu hỏi này đã có câu trả lời: Làm cách nào tôi có thể tính toán khoảng thời gian trong Java và định dạng đầu ra? (18 câu trả lời) Đã đóng 9 năm trước. đây là mã của tôi
Tôi có một ứng dụng API Web ASP.NET đang chạy trên phiên bản IIS cục bộ của mình. Ứng dụng web được cấu hình bằng CORS. Phương thức API Web mà tôi gọi tương tự như: [POST("/API/{foo}/{ba
Tôi có ngày và giờ được người dùng nhập là: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic);
Liệu việc nới lỏng tiêu chuẩn “hàng xóm” đã đủ chưa, hay có thể thực hiện những hành động tiêu chuẩn nào khác? Câu trả lời hay nhất Nếu tất cả các giải pháp liền kề là Tabu, có vẻ như kích thước danh sách Tabu của bạn quá dài hoặc chính sách phát hành của bạn quá nghiêm ngặt. Độ dài danh sách Tabu tốt là
Tôi đang đọc mã ví dụ này từ cppreference: #include #include #include #include template void print_queue(T& q)
Tôi đang cố gắng tìm hiểu hành vi của các chú giải công cụ nhưng không thành công. 1. Vấn đề đầu tiên là khi tôi cố gắng sử dụng nó trong sự kiện nhấp chuột thông qua plugin (Nút 1) -> Nếu vào Fiddle, bạn sẽ thấy bên trong Nội dung rằng thuộc tính của hàm được gọi trên mỗi lần nhấp
Tôi có đoạn mã sau trong một thành phần chức năng: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
Tôi gặp sự cố khi tải hình ảnh từ S3 bằng URL được ký trước và AFNetworking 3.0. Tôi có thể lấy hình ảnh bằng NSMutableURLRequest và NSURLSession, nhưng khi tôi sử dụng AFHT
Tôi đang xử lý sự cố với Oracle UCP Manager bằng cách sử dụng Oracle ojdbc 12 và Java 8. Khi nhóm UCP không khởi động được, tôi muốn đóng các kết nối mà nó tạo ra. ORA-02391: vượt quá khi gặp phải trong quá trình khởi tạo nhóm
đóng cửa. Câu hỏi này yêu cầu chi tiết hoặc rõ ràng. Câu trả lời không được chấp nhận vào thời điểm này. Bạn muốn cải thiện câu hỏi này? Thêm chi tiết và làm rõ câu hỏi bằng cách chỉnh sửa bài đăng này Đã đóng 9 năm trước. Cải thiện
Để trích dẫn plunker này: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview Tôi đã chỉ định trong tệp style.css và tệp src/app.ts
Tại sao thanh của tôi quá mỏng? Tôi đã thử đặt chiều rộng thành 1 và chúng trở nên rất dày. Tôi không biết phải thử cái gì nữa. Độ dày mặc định là 0,8, đây có phải là độ dày phải không? nhập matplotlib.pyplot dưới dạng nhập plt
Truy vấn thực hiện như mong đợi khi tôi viết: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2 Nhưng điều tôi thực sự muốn là một sự tham gia đúng đắn. khi
Tôi có dữ liệu thời gian sau: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
Một số thông tin cơ bản - máy chủ NodeJS của tôi đang chạy trên cổng 3001 và ứng dụng React của tôi đang chạy trên cổng 3000. Tôi đã thiết lập proxy trong gói ứng dụng React.json để ủy quyền ngang hàng
Tôi đang phải đối mặt với một vấn đề ngu ngốc. Tôi đang cố gắng lười tải hình ảnh của mình trong ứng dụng Angular, tôi đã thử 2 cái này: nhưng tất cả đều đặt src attr thay vì data-src, tôi có thiếu thứ gì ở đây không? Kín đáo
Tôi là một lập trình viên xuất sắc, rất giỏi!