C++17 ile tanıtılan [[nodiscard]] niteliği, bir fonksiyonun dönüş değerinin göz ardı edilmesinin genellikle bir hata olduğunu belirtmek için kullanılan güçlü bir araçtır. libc++ ve Microsoft STL gibi standart kütüphaneler, bu niteliği son zamanlarda agresif bir şekilde uygulamaya başlamıştır. malloc gibi fonksiyonlar için [[nodiscard]] kullanımı açıkça mantıklıdır; ancak unique_ptr::release gibi bazı durumlarda dönüş değerinin göz ardı edilmesi bazen kasıtlı bir yan etki için yapılabilmektedir. Bu tür "sınırda" durumlarda bile, yazar [[nodiscard]] kullanımının faydalı olduğunu, çünkü yanlış pozitif uyarıların (void) ile kolayca düzeltilebileceğini savunmaktadır.
Bu hafta gündeme gelen ilginç bir sınırda durum, libc++'ın map::operator[] fonksiyonunun [[nodiscard]] olarak işaretlenmesi önerisi oldu. Bu operatörün dönüş değerini göz ardı etmek genellikle bir hata olarak kabul edilse de, map::operator[] anahtar haritada yoksa varsayılan olarak oluşturulmuş bir değeri haritaya ekleme gibi bir yan etkiye sahiptir. Google'ın kod tabanlarında (Chromium ve Flatbuffers gibi projelerde) bu yan etki için mymap[key]; şeklinde kullanımların yaygın olduğu belirtilmiştir. Bu durum, [[nodiscard]] niteliğinin uygulanmasının potansiyel olarak birçok uyarıya yol açabileceği endişesini doğurmuştur.
Yazar, bu tür kullanımların kodun okunabilirliğini azaltabileceğini ve try_emplace gibi daha açık STL fonksiyonlarının tercih edilmesi gerektiğini savunmaktadır. Eğer C++17 öncesi uyumluluk nedeniyle try_emplace kullanılamıyorsa, (void)mymap[key]; gibi bir dönüştürme ile uyarıların giderilebileceğini belirtir. Genel olarak, [[nodiscard]] niteliğinin, dönüş değerlerinin göz ardı edildiği durumlarda potansiyel hataları yakalamak için değerli bir araç olduğunu ve geliştiricilerin kod kalitesini artırmasına yardımcı olduğunu vurgulamaktadır.
Bu nitelik, geliştiricilerin bir fonksiyonun dönüş değeri göz ardı edildiğinde potansiyel hataları yakalamasına yardımcı olur, yan etki amaçlı kullanımlarda bile kod kalitesini artırır.