Tôi luôn luôn nghĩ rằng nó là tốt để có người dân địa phương const được constTránh const người dân địa phương được trả lại?
void f() {
const resource_ptr p = get();
// ...
}
tuần Tuy nhiên cuối cùng tôi nhìn sinh viên mà làm việc trên C++ tập thể dục và băn khoăn về một con trỏ const được trả lại
resource_ptr f() {
const resource_ptr p = get();
// ...
return p;
}
đây , nếu trình biên dịch không thể áp dụng NRVO (hãy tưởng tượng một số kịch bản theo đó là đúng, có lẽ trả về một trong hai con trỏ, tùy thuộc vào điều kiện), đột nhiên const
trở thành một bi quan vì trình biên dịch không thể di chuyển từ p
, bởi vì nó const.
Bạn nên thử và tránh const
trên người dân địa phương đã trả lại hoặc có cách nào tốt hơn để giải quyết vấn đề này không?
Không thể di chuyển từ 'const' anyways cục bộ thông qua quy tắc if-if? –
Trong thực tế, trình biên dịch có xu hướng khá xấu khi áp dụng (N) RVO trong bất kỳ trường hợp nào nhưng tầm thường nhất, vì vậy đây là một mối quan tâm hợp lý. Một trường hợp đặc biệt là khi "biến cục bộ" của bạn thực sự là một đối số, trong đó bỏ cấm sao chép một cách đáng tiếc. –
Không phải trình biên dịch có thể xác định rằng thời gian tồn tại của 'p' sẽ kết thúc và di chuyển không? – Pixelchemist