Preheat oven to 350°F (176°C) and line a 12-cup muffin pan with paper liners.
In a medium bowl, whisk together flour, baking powder, and salt until well combined. Set aside.
In a large mixing bowl, beat butter, sugar, oil, and vanilla extract on medium-high speed for 2-3 minutes until light and fluffy.
Add eggs one at a time, mixing well after each addition and scraping down the bowl as needed.
Add half of the dry ingredients and mix on low speed until mostly combined.
Slowly pour in the milk while mixing, then add remaining flour mixture. Mix just until smooth.
Divide batter evenly among cupcake liners, filling each about three-quarters full.
Bake for 15-18 minutes or until a toothpick inserted in the center comes out clean.
Remove from oven and cool in pan for 5 minutes, then transfer to a wire rack to cool completely before frosting.
For frosting, beat softened butter until smooth, then gradually add powdered sugar, vanilla, cream, and salt. Mix until light and fluffy.
Pipe or spread frosting onto cooled cupcakes and add sprinkles if desired.