- 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
Đây là dạng C++17 của quy tắc ([basic.lval]/8), nhưng nó trông tương tự trong các tiêu chuẩn khác ("lvalue" thay vì "glvalue" trong C++98):
8 Nếu một chương trình cố gắng truy cập giá trị được lưu trữ của một đối tượng thông qua một giá trị không phải là một trong các loại sau thì hành vi đó không được xác định:
(8.4) - một loại là loại có dấu hoặc không dấu tương ứng với loại động của đối tượng
Quy tắc này nghe có vẻ giống như "trừ khi bạn làm X, bạn sẽ nhận được UB", nhưng điều đó không có nghĩa là nếu bạn làm là UB có điều kiện hoặc vô điều kiện, tùy thuộc vào phiên bản của tiêu chuẩn.
Chúng ta hãy xem đoạn mã sau:
int tôi = -1;
chưa ký j = reinterpret_cast(i);
Hành vi của mã này là gì?
[expr.reinterpret.cast]/10 (/11 trong C++11) (nhấn mạnh của tôi):
Một biểu thức giá trị của loại T1 có thể được chuyển thành loại “tham chiếu đến T2” nếu một biểu thức thuộc loại “con trỏ tới T1” có thể được chuyển đổi rõ ràng thành loại “con trỏ tới T2” bằng cách sử dụng reinterpret_cast. (x) có tác dụng tương tự như chuyển đổi *reinterpret_cast(&x) với các toán tử & và * tích hợp. Kết quả là một giá trị tham chiếu đến cùng một đối tượng với giá trị nguồn, nhưng với một loại khác.
所以 reinterpret_cast
giá trị đề cập đến int
对象 Tôi
, nhưng với được sử dụng
kiểu. Việc khởi tạo yêu cầu khởi tạo giá trị của một biểu thức, có nghĩa chính thức là áp dụng chuyển đổi lvalue-to-rvalue cho lvalue.
[conv.lval]/1:
Một giá trị của không có chức năng, không có mảng loại T có thể được chuyển đổi thành giá trịNếu T là loại không đầy đủ thì chương trình yêu cầu chuyển đổi này sẽ không được định dạng đúng. Nếu đối tượng mà lvalue đề cập đến không phải là đối tượng thuộc loại T và không phải là đối tượng thuộc loại bắt nguồn từ T hoặc nếu đối tượng chưa được khởi tạo, một chương trình yêu cầu chuyển đổi này có hành vi không xác định.
giá trị của chúng tôi không dấu
loại không được tham chiếu không dấu
Loại đối tượng có nghĩa là hành vi không được xác định.
Trong các tiêu chuẩn này, mọi thứ phức tạp hơn một chút nhưng các quy tắc lại được nới lỏng một chút. [expr.reinterpret.cast]/11 cũng nói như vậy:
Kết quả đề cập đến cùng một đối tượng với giá trị nguồn, nhưng với loại được chỉ định.
Ngôn ngữ xúc phạm liên quan đến UB đã bị xóa khỏi [conv.lval]/1:
Một giá trị của không có chức năng, không có mảng loại T có thể được chuyển đổi thành một giá trịNếu T là loại không đầy đủ thì chương trình yêu cầu chuyển đổi này sẽ không được định dạng đúng. Nếu T là loại không phải loại, thì loại giá trị là phiên bản cv không đủ tiêu chuẩn của T. Ngược lại, loại giá trị là T.
Nhưng chuyển đổi L-to-R đọc được giá trị nào? [conv.lval]/(2.6) (/(3.4) trong C++17) trả lời câu hỏi này:
… giá trị chứa trong đối tượng được biểu thị bằng glvalue là kết quả của giá trị
không dấu
giá trị reinterpret_cast
thể hiện Tôi
int
Giá trị là -1
Các giá trị được tạo ra bởi việc chuyển đổi L-to-R của các đối tượng là không dấu
kiểu. [expr]/4 đã nói:
Nếu trong quá trình đánh giá một biểu thức, kết quả không được xác định về mặt toán học hoặc không nằm trong phạm vi giá trị biểu thị cho loại của nó thì hành vi đó không được xác định.
-1
Tuyệt đối không có ở đây không dấu
Loại biểu thức giá trị nằm trong phạm vi giá trị có thể biểu thị, do đó hành vi không được xác định.
nếu như Tôi
Đối tượng hành vi sẽ được xác định để chứa các giá trị trong phạm vi [0, INT_MAX].
Lý do tương tự áp dụng cho không dấu
tình huống. vượt qua int
Các đối tượng truy cập thêm giá trị. Đây là UB trong C++98 và C++11 và UB trong C++14 và C++17, trừ khi giá trị của đối tượng nằm trong phạm vi [0, INT_MAX].
Vì vậy, trái với niềm tin phổ biến, quy tắc bí danh này cho phép các đối tượng được diễn giải lại dưới dạng chứa các giá trị của các loại có dấu/không dấu tương ứng, nó không cho phép điều này. Các đối tượng thuộc loại có dấu và không dấu có cùng cách biểu diễn cho các giá trị trong phạm vi [0, INT_MAX] ("Phạm vi giá trị không âm của loại số nguyên có dấu là phạm vi con của loại số nguyên không dấu tương ứng, biểu thị rằng cùng một giá trị ở hai loại là giống nhau", [basic.fundamental]/3 trong C++17). Thật khó để gọi quyền truy cập này là "diễn giải lại", chứ chưa nói đến việc đây là UB vô điều kiện trước C++ 14.
Vậy mục đích của quy tắc ([basic.lval]/(8.4)) là gì?
câu trả lời hay nhất
Đây là báo cáo lỗi 2214 Chủ đề nó nói:
Phần: 6.9.1 [basic.fundamental] Trạng thái: C++17 Người gửi: Richard Smith Ngày: 15-12-2015
[Được thông qua tại cuộc họp tháng 2/tháng 3 năm 2017.]
Theo 6.9.1 [basic.fundamental] đoạn 3,
Phạm vi các giá trị không âm của loại số nguyên có dấu là một phạm vi con của loại số nguyên không dấu tương ứng và cách biểu diễn giá trị của từng loại có dấu/không dấu tương ứng sẽ giống nhau. (Đây là cách diễn đạt trong phiên bản C++11 và C++14, mặc dù số đoạn văn có thể khác nhau -- nm)
Phương pháp viết tương ứng cho C11 là,
Phạm vi các giá trị không âm của loại số nguyên có dấu là một phạm vi con của loại số nguyên không dấu tương ứng và cách biểu diễn cùng một giá trị trong mỗi loại là như nhau.
Từ ngữ C được cho là rõ ràng hơn, nhưng nó làm mất đi hàm ý của từ ngữ C++ rằng bit dấu của loại có dấu là một phần của biểu diễn giá trị của loại không dấu tương ứng.
Nghị quyết đề xuất (tháng 1 năm 2017):
Thay đổi đoạn 3 của 6.9.1 [basic.fundamental] như sau:
...Các kiểu số nguyên không dấu tiêu chuẩn và mở rộng được gọi chung là các kiểu số nguyên không dấu. Phạm vi giá trị không âm của kiểu số nguyên có dấu là một tập con của kiểu số nguyên không dấu tương ứng. sự biểu diễn của cùng một giá trị ở mỗi loại trong hai loại là như nhauvà biểu diễn giá trị của từng loại có dấu/không dấu tương ứng sẽ giống nhau. Các loại số nguyên có dấu tiêu chuẩn...
Vì vậy, đó rõ ràng là ý định từ lâu. C++17 vừa sửa từ ngữ.
Các tiêu chuẩn C và C++ không bao giờ nhằm mục đích cho phép các giá trị âm được diễn giải lại dưới dạng không dấu hoặc ngược lại. Có một số cách biểu diễn số nguyên có dấu trong tự nhiên (ví dụ: phần bù một, phần bù hai, dấu và độ lớn) và tiêu chuẩn không bắt buộc bất kỳ cách biểu diễn nào trong số đó, vì vậy nó không thể chỉ ra tác động của việc diễn giải lại như vậy. họCó thểĐịnh nghĩa này được thực hiện, nhưng với khả năng biểu diễn bẫy, điều này không mang lại lợi ích thực sự. "Thực hiện những hậu quả hoặc cạm bẫy đã xác định" cũng tốt như "không xác định".
Giới thiệu về c++ - Quy tắc bí danh đã ký/không dấu có hoạt động như mong đợi không? , 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/54085710/
Tôi đã tìm thấy câu hỏi và câu trả lời tuyệt vời này bắt đầu bằng x/y (cộng với tâm x/y và độ/radian) và tính toán góc quay - thành x'/y'. Cách tính này rất
Tất cả: Tôi đã tạo Biểu mẫu Windows và Nút. Trong một chủ đề khác, tôi đã cố gắng thay đổi văn bản của nút và nó bị lỗi; nhưng nếu tôi cố gắng thay đổi màu của nút thì chắc chắn nó thành công. Tôi nghĩ nếu bạn thay đổi bất kỳ thuộc tính kiểm soát Windows Forms nào
Một câu hỏi khác trên trang này đã xác nhận rằng không có hậu tố theo nghĩa đen cho các chữ viết tắt trong C và có thể thực hiện được: short Number = (short)1 nhưng sự khác biệt giữa việc chuyển đổi nó và không thực hiện điều này là gì: short Number = 1; bạn sử dụng
Tôi có bảng sau: ID (int) EMAIL (varchar(50)) CAMPAIGNID (int) isSubscribe (bit) isActionByUser (bit) Bảng này lưu trữ hành động của người dùng
Nghĩa là, làm cách nào tôi có thể giữ lại trạng thái của hộp kiểm mà tôi đã chọn hoặc bỏ chọn theo cách thủ công, sau đó sao chép nó sang một nơi khác mà không kích hoạt sự kiện Javascript cho thuộc tính thay đổi? Chạy đoạn mã bên dưới và chọn hoặc bỏ chọn một số đoạn mã, sau đó nhấp vào Sao chép: $('#
Tất cả các ví dụ tôi tìm thấy trực tuyến về việc tăng con trỏ gây ra lỗi phân tách đều liên quan đến việc hủy tham chiếu con trỏ - nếu tôi chỉ muốn tăng nó (như ở cuối vòng lặp for) và tôi không quan tâm liệu nó có nằm trong bộ nhớ không hợp lệ hay không bởi vì tôi sẽ không làm điều đó nữa. Hãy sử dụng nó. Ví dụ, trong chương trình này, mỗi lần lặp
Tôi có dịch vụ Spring MVC REST sử dụng XStream để chuyển đổi thư sang và từ XML. Có cách nào để in xml (tức là nội dung) từ yêu cầu và phản hồi tới trình ghi nhật ký log4j bình thường không? Trong Contr.
Có một thách thức lớn trong việc thực hiện nhiệm vụ của tôi và đó là thực hiện các nhiệm vụ phụ thuộc lẫn nhau mà tôi đang nói đến trong bức ảnh này. Giả sử chúng ta có hai nhiệm vụ A và B, thực hiện nhiệm vụ con A1, A2 và B1, B2. Để thực hiện nhiệm vụ B một cách lý tưởng, bạn nên thực hiện
Từ việc đọc một số câu trả lời trên trang web này, tôi hiểu rằng CoInitialize(Ex) nên được người tạo chủ đề gọi. Bất kỳ mã nào đang chạy trong luồng đó đều có thể sử dụng
Vấn đề này đã làm phiền tôi một thời gian. Tôi chưa bao giờ thực sự sử dụng ListView trước đây cũng như FirebaseListAdapters. Điều tôi muốn làm là bắt đầu phần cơ sở của danh sách bằng cách hiển thị id và vị trí người dùng, nhưng vì lý do nào đó,
Tôi đang gặp khó khăn khi giải thích ý nghĩa của hai câu (có vẻ đơn giản) này: "Các ngoại lệ đã kiểm tra được trình biên dịch kiểm tra tại thời điểm biên dịch" Điều này có nghĩa là gì? Trình biên dịch có kiểm tra xem tất cả các ngoại lệ được kiểm tra (được đưa vào mã) có bị bắt không? "Các trường hợp ngoại lệ không được kiểm tra được kiểm tra trong thời gian chạy, không phải thời gian biên dịch"
Tôi có một tệp văn bản chứa chuỗi con loại trừ và tôi muốn lặp lại tệp để kiểm tra và trả về các mục không có chuỗi con loại trừ. Ở đây tôi đang sử dụng python 2.4 nên đoạn mã bên dưới sẽ thực hiện thủ thuật như khi mở và bất kỳ mã nào cũng không hoạt động
Khung bộ nhớ đệm của Spring có thể hiểu trạng thái xác thực của ngữ cảnh yêu cầu hay việc triển khai giải pháp bộ nhớ đệm của riêng bạn sẽ dễ dàng hơn không? Câu trả lời hay nhất Mặc dù tôi thấy trường hợp sử dụng này cực kỳ lạ nhưng bạn có thể đặt điều kiện bộ đệm cho hầu hết mọi thứ được sử dụng với SpEL
Tôi có mẫu hàm sau: template HeldAs* trùng lặp( MostDerived *origin, HeldAs *held) { // kiểm tra lỗi omi
Làm cách nào tôi có thể tắt (hoặc ngăn khởi động) một ứng dụng khác từ trong ứng dụng của mình nếu ứng dụng của tôi có quyền quản trị viên/chủ sở hữu thiết bị (không phải quyền truy cập root)? Câu trả lời hay nhất Chủ sở hữu thiết bị có thể chặn ứng dụng: DevicePolicy
Câu hỏi rất đơn giản nhưng dường như tôi không thể làm được. Tôi có một thành phần có một số XSLT trong đó (để điều hướng). Nó được xuất bản qua XSLT TBB bằng cách sử dụng XSLT Mediator. sau khi phát hành
Tôi đang kéo một đối tượng bên trong một đối tượng có thể kéo được. Khi một đối tượng được đặt, nó sẽ được lồng vào trong đối tượng có thể đặt được. Tương tự như vậy, nếu tôi kéo đối tượng ra bên ngoài đối tượng có thể phân tách, nó sẽ không còn được lồng vào nhau nữa. Tuy nhiên, nếu tôi kéo đối tượng có thể kéo vào và kéo ra thường xuyên, đối tượng có thể kéo sẽ
Tôi đang cố triển khai chức năng "bỏ chọn" cho nhiều lệnh như nút và cửa sổ bật lên. Nghĩa là, tôi muốn chức năng của mình được kích hoạt khi người dùng nhấp vào một phần tử không phải là một phần của mẫu lệnh. Hiện tại tôi đang sử dụng mã JQuery sau: $('body').click
Tôi đã nhận được mã bên dưới từ câu hỏi này, một tập lệnh để thay đổi CSS bên trong iframe[src="about:blank"] trên các tác vụ của Google bằng tiện ích mở rộng Tempe của Chrome
Tôi có một số đối tượng @Mock nhưng tôi không chỉ định giá trị trả về cho các phương thức gọi trên đối tượng. Phương thức này trả về một số nguyên (không phải số nguyên). Tôi rất ngạc nhiên khi thấy Mockito không ném NPE và trả về 0. Đây có phải là hành vi dự kiến? Ví dụ:
Tôi là một lập trình viên xuất sắc, rất giỏi!