- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Có vẻ như trong c++, trong bối cảnh bool thuần túy,toán tử*()
的优先级高于 toán tử bool() const
; và bật chế độ c++11 và sử dụng toán tử rõ ràng bool() const
Không hữu ích. Đây có phải là lỗi trong g++ hay lỗi trong tiêu chuẩn ngôn ngữ không? Hay tôi không thấy lý do chính đáng cho sự điên rồ này?
Trình bày đơn giản về vấn đề:
#include
cấu trúc A
{
char buf[512];
int lỗi;
toán tử char* () { return buf }
toán tử const char* () const { return buf }
toán tử bool () const { return !err }
// toán tử rõ ràng bool () const { return !err } // cùng một vấn đề
};
int main()
{
Một;
a.err = -42;
nếu (a) {
printf("lolwut?\n");
return 1;
}
return 0;
}
câu trả lời hay nhất
Như @oakad đã giải thích - giải pháp tao nhã là sử dụng ở chế độ c++11 toán tử rõ ràng char*()
. Điều này sẽ đảm bảo toán tử*()
Sẽ không được sử dụng trong bối cảnh bool.
作为giải thích bởi @bolov - Hành vi được quan sát là một phần của tiêu chuẩn ngôn ngữ. Theo 13.3.1, các phương thức được coi là có các tham số đối tượng ngầm nhằm mục đích giải quyết các hàm bị quá tải. Đối với các phương thức được khai báo không có vòng loại ref, tham số này là tham chiếu đến lớp có vòng loại cv tương ứng.
Vì vậy, chúng tôi thực sự có tình huống sau:
char* op(A& a) { return a.buf }
bool op(const A& a) { return !a.err }
由于Một
hiện hữuchủ yếu()
đúng và saiconst
,KHÔNGconst
toán tử được chọn. chúng ta có toán tử*()
hoặc toán tử int()
hoặc toán tử kép()
Không quan trọng - không const
Các toán tử ép kiểu có thể được sử dụng trong ngữ cảnh bool có độ ưu tiên cao hơn toán tử bool() const
.
Giới thiệu về c++ - Tại sao operator char*() ghi đè operator bool() const trong ngữ cảnh bool? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/23356491/
Câu hỏi này đã có câu trả lời ở đây: Tại sao các toán tử gán +=, -=, *=, /= của Java không yêu cầu truyền (11 câu hỏi)
Khi tôi cố chạy đoạn mã sau, List(.of) không biên dịch được và báo lỗi chủ đề. bộ sưu tập gói; nhập java.util.LinkedHashSet;
Tôi đang cố gắng biên dịch một chương trình sử dụng thư viện ChatScript. Đây là mã của tôi trong một tệp có tên main.cpp: #include #include "common.h" sử dụng không gian tên std
Tôi muốn sử dụng ChatScript bên ngoài trong chương trình của mình. Trong tài liệu có ghi: Nhúng Bước #1 Trước tiên, bạn sẽ cần sửa đổi `common.h và
Giả sử tôi có một char và tôi muốn strcat() nó thành một mảng char với một dòng mã. Ví dụ [không thực tế]: strcat("ljsdflusdfg",getchar()); Hoặc tôi muốn làm ngược lại
Tôi có chữ ký loại sau: *Main Lib> let f :: a -> a -> a; f = không xác định *Main Lib> let x :: Char x = undefin;
Tôi đang học cách sử dụng con trỏ trong C (sử dụng malloc và miễn phí), nhưng tôi gặp một số vấn đề với bài tập này. Tôi chỉ muốn tạo một mảng con trỏ trong đó tôi muốn lưu hướng của mỗi từ. Sau đó, tôi muốn thực hiện free() cho một từ cụ thể,
Tôi có một char*: char* version = "10.5.108"; Tôi muốn nhận hai char* mới bằng dấu phân cách ký tự. char delimiter = '.'; Sau khi thực thi đoạn mã sau: printf("|
Gần đây tôi đang học Cpp và có điều gì đó kỳ lạ đã xảy ra khi tôi học cách sử dụng Clion để thử nghiệm ngày hôm nay. Đây là mã của tôi int main() { char c = 'b';
Tôi mới làm quen với c và tôi đang xem lại một số mã. Tôi đã xem qua điều này: static char * fromDataType; static char * toDataType; static char * fromR;
Tôi có một cấu trúc động như thế này: struct network { int count; char** ips } Nếu tôi biết rằng mỗi mảng chuỗi là 16 byte (tức là INET_ADDRSTR
Tôi có một chương trình cũ sử dụng một số chức năng thư viện nhưng tôi không có thư viện đó. Vì vậy tôi đang viết chương trình này bằng thư viện C++. Trong mã cũ đó có một số hàm được gọi như thế này *string = newstrdup("Đây là một số từ");
Tôi đang viết một hàm lấy một ArrayList rồi sao chép từng char[] sang một char[] khác có độ dài tăng dần rồi thêm char[] mới vào ArrayList mới. Khi tôi cố gắng sao chép mảng
Tôi đang tìm bản đồ > và tạo mọi bản đồ có thể có từ nó. Tôi biết việc này có thể sử dụng nhiều bộ nhớ và mất chút thời gian. Mỗi bản đồ cần chứa từng chữ cái az và ánh xạ tới một ký tự az duy nhất. tức là. Ah bjcp di EVfh ga trứng đỏ máu
#define NAME_LEN 20 #include "stdio.h" #include "stdlib.h" #include "string.h" #pragma Warning(disab
Vì vậy tôi phải tạo một hàm tìm cặp có chữ cái đầu tiên và trả về chữ cái thứ hai. Tôi thực sự đã tìm thấy câu trả lời nhưng không thể tìm thấy nó bằng chức năng bản đồ. tra cứu :: Char -> [(Char, Cha
Gần đây tôi đã được phỏng vấn và được yêu cầu viết mystrcat(*s1, *s2, *s3) trong đó s1 và s2 là các chuỗi nguồn và kết quả nối được đưa ra bởi s3. Tôi được yêu cầu đừng lo lắng về việc cấp phát bộ nhớ cho s3 và cho rằng s1 và s2 không phải là các từ rỗng/không hợp lệ
Hôm nay tôi đang thảo luận với một đồng nghiệp về chữ ký chức năng "chính" bất thường của anh ấy (đối với tôi). Anh ấy thích khai báo nó như thế này: int main(int argc, char* (*argv)[]) { printf("at index
Câu hỏi này đã có câu trả lời ở đây: Đã đóng 12 năm trước. Có thể trùng lặp: Sự khác biệt giữa char mới [10] và cha mới là gì
Thông thường các chuỗi ký tự có kiểu const char[]. Nhưng khi tôi coi nó là loại khác, tôi nhận được kết quả lạ. unsigned char *a = "\355\1\23"; Sử dụng trình biên dịch này sẽ đưa ra cảnh báo "Con trỏ khi khởi tạo
Tôi là một lập trình viên xuất sắc, rất giỏi!