मैं यह निर्धारित करने की कोशिश कर रहा हूं कि सी ++ फ़ंक्शन को इस तरह से घोषित किया जा सकता है कि वापसी मूल्य को अनदेखा नहीं किया जा सकता है (आदर्श रूप से संकलन समय पर पता चला है)। मैंने private
(या सी ++ 11, delete
डी) operator void()
के साथ एक वर्ग घोषित करने का प्रयास किया जब वापसी मूल्य अप्रयुक्त होने पर शून्य में अंतर्निहित रूपांतरण को पकड़ने का प्रयास किया गया।क्या सी ++ फ़ंक्शन घोषित किया जा सकता है कि वापसी मूल्य को अनदेखा नहीं किया जा सकता है?
class Unignorable {
operator void();
};
Unignorable foo()
{
return Unignorable();
}
int main()
{
foo();
return 0;
}
दुर्भाग्य से, मेरी संकलक (बजना-703.0.31) का कहना है::
test.cpp:2:5: warning: conversion function converting 'Unignorable' to 'void' will never be used
operator void();
^
और किसी भी त्रुटि को उठाने नहीं करता है या foo()
को फोन पर चेतावनी
यहाँ एक उदाहरण कार्यक्रम है । तो, यह काम नहीं करेगा। ऐसा करने के लिए कोई और रास्ता नहीं है? सी ++ 11 या सी ++ 14 या बाद में विशिष्ट उत्तर ठीक होंगे। पहले C++ 17
रनटाइम या संकलन समय? –
http://stackoverflow.com/questions/12692892/force-returned-object-to-be-assign –
क्या आप सकारात्मक हैं कि 'शून्य' में एक अंतर्निहित रूपांतरण है? मुझे इसके बारे में मानक में कुछ भी नहीं मिला। (लेकिन मुझे यह भी यकीन नहीं है कि क्या परिवर्तित किया जाएगा।) AFAIK, ऐसा तब होता है जब रिटर्न वैल्यू में "रिसीवर" नहीं होता है, एक अस्थायी वस्तु का निर्माण और विनाश होता है। इस उद्देश्य के लिए – molbdnilo