19 Mart 2018 Pazartesi

[[maybe_unused]] Attribute

Giriş
C++17 ile geliyor. "unused variable" uyarısını kapatır.
Macrolarda
Örnek
Elimizde şöyle bir kod olsun. NDEBUG tanımlı değilse assert derlenmez, j kullanılmıyor gibi görünür.
void fun(int i, int j) {
    assert(i < j);
    // j not used here anymore
}
Şöyle yaparız.
void fun(int i,[[maybe_unsued]] int j) {
  assert(i < j);
  // j not used here anymore
}
Tempate Kodlarda
Örnek
Elimizde şöyle bir kod olsun.
template <std::size_t... I>
auto func1(std::index_sequence<I...>)
{
  auto var = get_tuple();
  return func2(std::get<I>(var)...);
}

auto a = func1(std::make_index_sequence<0>());
0 ile çağrıldığı zaman var değişkeni kullanılmıyor. Uyarıyı kapatmak için şöyle yaparız.
[[maybe_unused]]
auto var = get_tuple();
Örnek
Elimizde şöyle bir kod olsun. int ile çağrılınca else kısmı çalışmaz.
#include <type_traits>

template<typename T>
auto add_or_double(T t1, T t2) noexcept {
    if constexpr (std::is_same_v<T, int>)
        return t1 + t2;
    else
        return t1 * 2.0;
}

int main(){
  add_or_double(1, 2);
  add_or_double(1.0, 2.0);
}

Hiç yorum yok:

Yorum Gönder