unique_lock
constructors में से कुछ में सी ++ 11 एक कुछ classes एक ध्वज की तरह, यानीसी ++ 11 खाली झंडा कक्षाएं
auto lock = std::unique_lock<std::mutex> lock(m, std::defer_lock);
जहां std::defer_lock
struct defer_lock {}
के रूप में परिभाषित किया गया है पारित कर सकते हैं ऐसा क्यों किया जाता है, न कि enum के साथ?
मैं एक छोटे से कोड नमूना करने के लिए इस लागू करने की कोशिश, लेकिन मैं इसे संकलन नहीं मिल सका:
class A {};
void foo(A a) {}
int main() {
foo(A); // error: 'A' does not refer to a value
}
जब मैं foo(A());
यह काम करता है की तरह कोष्ठकों शब्दों में कहें, लेकिन मैं करने के लिए अंतर दिखाई नहीं देता एसटीएल यह अलग तरीके से क्यों व्यवहार करता है?
[ऐसा लगता है कि 'std :: defer_lock' वास्तव में 'std :: defer_lock_t'] का एक उदाहरण है (http://en.cppreference.com/w/cpp/thread/lock_tag)। मेरा अनुमान है कि इसका उपयोग क्यों किया जाता है क्योंकि यह एक enum मान (बूट करने के लिए रन-टाइम पर) पर बदसूरत स्विच-केस की बजाय संकलक को ओवरलोड का चयन करने देता है। – Cameron