Set default values when binding the whole flagset
diff --git a/viper.go b/viper.go
index 0fed695..7099b9c 100644
--- a/viper.go
+++ b/viper.go
@@ -429,6 +429,14 @@
 		}
 
 		err = v.BindPFlag(flag.Name, flag)
+		switch flag.Value.Type() {
+		case "int", "int8", "int16", "int32", "int64":
+			v.SetDefault(flag.Name, cast.ToInt(flag.Value.String()))
+		case "bool":
+			v.SetDefault(flag.Name, cast.ToBool(flag.Value.String()))
+		default:
+			v.SetDefault(flag.Name, flag.Value.String())
+		}
 	})
 	return
 }